2016-05-24 2 views
1

я следующую строку:матч линия, оленья кожа содержат определенные слова

ignoreword1,word1, ignoreword2 

я хотел бы, чтобы соответствовать любое слово, которое не ignoreword1 или ignoreword2

это то, что я до сих пор

(?s)^((?!ignoreword1).)*$ 

Основная цель состоит в том, чтобы использовать регулярное выражение как часть базы данных postgresql для выбора строк, где столбец соответствует подстроке после удаления «ignoreword1», «ig noreword2" и запятая ""

+1

*, чтобы соответствовать любому слову, которое не является ignoreword1 или ignoreword2 * использовать '\ b (?! (?: ignoreword1 | ignoreword1) \ b) \ w +', но, возможно, вы имеете в виду соответствие * string *, затем попробуйте '^ (?! (?: ignoreword1 | ignoreword1) $). *' –

+0

, пожалуйста, разместите его как ответ! – fawzib

ответ

1

Чтобы соответствовать любое слово, которое не ignoreword1 или Ignoreword2 использование

\b(?!(?:ignoreword1|ignoreword2)\b)\w+ 

В PostgreSQL словоразделы являются [[:<:]] и [[:>:]], поэтому использовать что-то вроде:

[[:<:]](?!(?:ignoreword1|ignoreword2)[[:>:]])[a-zA-Z]+ 

Сведения об образцах:

  • [[:<:]] - ведущий границы слова
  • (?!(?:ignoreword1|ignoreword2)[[:>:]]) - провалить матч, если вся строка либо ignoreword1 или ignoreword2
  • [a-zA-Z]+ - один или несколько любых ASCII буквы.
+0

SELECT SUBSTRING (columnName FROM '\ b (?! (?: ignoreword1 | ignoreword1) \ b) \ w +') как sub_t, * FROM TableT .. sub_t должно содержать соответствующее слово в каждом столбце. в моем случае он пуст. он работает на regex101.com – fawzib

+0

Не похоже, что regex PostgreSQL поддерживает обратные ссылки. Однако попробуйте '[[: <:]] (?! (?: ignoreword1 | ignoreword2) [[:>:]]) [a-zA-Z] +' –

+0

Это сработало. большое спасибо! я ставлю, что многие люди задаются вопросом то же самое. – fawzib

Смежные вопросы