我想(^|\s)1001(\s|$)
在类似于表达式的Firebird中使用正则表达式:
例子:
abc 1001 abc
-是的abc 121001 abc
-错误1001 abc
-是的121001
-错误abc 1001
-是的我尝试将其转换为Firebird中的正则表达式:
其中COLUMN与相似(^|[:WHITESPACE:])abc 1001 abc($|[:WHITESPACE:])
,但^
(行首)和$
(行尾)不起作用,查询以以下结尾:
无效的SIMILAR TO模式异常。
我在https://firebirdsql.org/refdocs/langrefupd25-similar-to.html的Firebird Doc中找不到有关行首和行尾的任何信息
根据《 Firebird 2.5语言参考》中的SIMILAR TO
说明文件:
SIMILAR TO将字符串与SQL正则表达式模式匹配。与某些其他语言不同,该模式必须匹配整个字符串才能成功-匹配子字符串是不够的。
换句话说,正则表达式是多行的,并且-在给定链接文档的情况下-不提供开始/结束锚,因为已经暗示了它们(但是整个字符串而不是每行),因为不支持部分匹配。
Firebird中的正则表达式实现符合SQL标准,该标准也未定义开始/结束锚点。
根据您的要求,您可能需要类似以下内容:
'(abc 1001( %)?)|((% )?1001 abc)'
其中( %)?
手段意味着可选地匹配一个空格和零个或多个任何字符。给定整个字符串必须匹配,这意味着它将找到一个空格或字符串的结尾,并且与相似(% )?
。
如果您还需要在字符串的中间找到它,则可能需要添加其他术语(但您的示例均不建议这样做)。
或者,直接等效于(^|\s)1001(\s|$)
:
'(%[[:WHITESPACE:]])?1001([[:WHITESPACE:]]%)?'
该答案的早期版本使用(% |)
代替(% )?
,但是给定的空白术语没有被记录,也没有成为标准的一部分,这可能是实现错误或充其量是未记录的功能。使用它需要您自担风险。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句