【问题标题】:How to disable matching if pattern when it comes at the end如果模式结束时如何禁用匹配
【发布时间】:2015-01-14 09:42:28
【问题描述】:

如果模式出现在行尾,我想禁用匹配模式。 例如我的字符串是“Hello, world”,我也想匹配这个字符串和“Hello, world!”细绳。 到目前为止我试过了

SELECT 'Hello, world' SIMILAR TO '%([\-\,\.\s\?\!]?)world([\-\,\.\s\?\!]+)%', 
       'Hello, world!' SIMILAR TO '%([\-\,\.\s\?\!]?)world([\-\,\.\s\?\!]+)%' 

但第一个匹配返回 false。

更新
要匹配的单词:
你好,世界!
再见,世界。
嗨世界
这个世界真奇妙。

不匹配的词:
你好世界
你好,世界。
这个问题被认为是全球性的。

【问题讨论】:

  • 您说如果模式出现在末尾则要禁用匹配,但是在“Hello, world”中,“world”出现在末尾,并且您仍然希望正则表达式匹配。这不矛盾吗?
  • @user3409662 但如果不是“世界”这个词,而是“世界等”,它也会被匹配,但我想阻止它。
  • 你能编辑你的问题,并添加几个你想匹配的字符串示例,以及几个你不想匹配的字符串示例吗?
  • 添加了我想匹配和跳过的单词。

标签: regex postgresql


【解决方案1】:

怎么样:

SELECT 'Hello, world' ~* '\yworld\y';

~* 匹配正则表达式并且不区分大小写

\y 匹配单词边界

根据 standard_conforming_strings 参数的值,您可能必须使用 2 个反斜杠:

SELECT 'Hello, world' ~* '\\yworld\\y';

【讨论】:

  • 难以置信,这完全符合我的要求。我已经阅读了有关 ~* 符号的文档,但肯定错过了 \y 添加。非常感谢。
猜你喜欢
  • 2015-07-06
  • 2016-02-08
  • 2019-02-14
  • 2022-01-15
  • 2021-03-10
  • 1970-01-01
  • 2015-03-15
  • 2012-10-27
  • 1970-01-01
相关资源
最近更新 更多