【问题标题】:match line that doesnt contain certain words不包含某些单词的匹配行
【发布时间】:2016-05-24 15:34:10
【问题描述】:

我有以下字符串:

ignoreword1,word1, ignoreword2

我想匹配不是ignoreword1ignoreword2 的任何单词

这是我目前所拥有的

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

主要目标是使用正则表达式作为 postgresql 数据库的一部分,在删除“ignoreword1”、“ignoreword2”和逗号“,”后选择列与子字符串匹配的行

【问题讨论】:

  • 匹配任何不是ignoreword1或ignoreword2的单词使用\b(?!(?:ignoreword1|ignoreword1)\b)\w+,但也许,你的意思是匹配一个字符串,然后,尝试^(?!(?:ignoreword1|ignoreword1)$).*
  • 请将其作为答案发布!

标签: sql regex database postgresql match


【解决方案1】:

要匹配不是ignoreword1Ignoreword2 的任何单词,请使用

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

在 PostgreSQL 中,单词边界是 [[:<:]][[:>:]],所以使用类似:

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

图案细节:

  • [[:&lt;:]] - 引导词边界
  • (?!(?:ignoreword1|ignoreword2)[[:&gt;:]]) - 如果整个字符串是 ignoreword1ignoreword2,则匹配失败
  • [a-zA-Z]+ - 一个或多个任意 ASCII 字母。

【讨论】:

  • SELECT SUBSTRING(columnName FROM '\b(?!(?:ignoreword1|ignoreword1)\b)\w+') as sub_t, * FROM TableT .. sub_t 应该在每一列中包含匹配的单词.就我而言,它是空的。它适用于 regex101.com
  • 似乎 PostgreSQL 正则表达式根本不支持环视。但是,请尝试[[:&lt;:]](?!(?:ignoreword1|ignoreword2)[[:&gt;:]])[a-zA-Z]+
  • 这行得通。多谢!我敢打赌很多人都想知道同样的事情
  • 太棒了!文档中充满了令人困惑的东西,因此您的反馈非常有用。
猜你喜欢
  • 2015-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多