我想在类似于表达式的Firebird中使用像(^|\s)1001(\s|$)
这样的正则表达式:
示例:
abc 1001 abc
-真正的abc 121001 abc
-假1001 abc
-真正的121001
-假abc 1001
-真正的我尝试将其转换为Firebird中的正则表达式:
其中COLUMN与
(^|[:WHITESPACE:])abc 1001 abc($|[:WHITESPACE:])
类似,但^
(行的开始)和$
(行的结束)不起作用,查询以以下结尾:我在https://firebirdsql.org/refdocs/langrefupd25-similar-to.html的Firebird Doc中找不到有关行首和行尾的任何信息
最佳答案
从《 Firebird 2.5语言引用》中, SIMILAR TO
documentation:
换句话说,正则表达式是多行的,并且-在给定链接文档的情况下-不提供开始/结束 anchor ,因为已经暗示了这些 anchor (但是整个字符串而不是每行),因为不支持部分匹配。
Firebird中的正则表达式实现符合SQL标准,该标准也未定义开始/结束 anchor 。
根据您的要求,您可能需要类似以下内容:
'(abc 1001( %)?)|((% )?1001 abc)'
其中( %)?
表示可以选择匹配一个空格和零个或多个任何字符。给定整个字符串必须匹配,这意味着它将找到字符串的空格或结尾,并且类似于(% )?
。如果您还需要在字符串的中间找到它,则可能需要添加其他术语(但您的示例均不建议这样做)。
或者,直接等效于
(^|\s)1001(\s|$)
:'(%[[:WHITESPACE:]])?1001([[:WHITESPACE:]]%)?'
此答案的较早版本使用
(% |)
而不是(% )?
,但由于没有记录空术语,也不属于标准,因此可能是实现错误或充其量是未记录的功能。使用它需要您自担风险。关于与正则表达式类似的SQL,等效于行的开始^和结束$,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52119825/