B_A*_*T_Y 5 regex sql firebird
我想(^|\s)1001(\s|$)在类似表达式的Firebird中使用正则表达式:
示例:
abc 1001 abc - 是的abc 121001 abc - 假1001 abc - 是的121001 - 假abc 1001 - 是的我试着将它转换为Firebird中的正则表达式:
COLUMN类似于(^|[:WHITESPACE:])abc 1001 abc($|[:WHITESPACE:]),但^(行首)和$(行尾)不起作用,查询以:
模式异常的SIMILAR TO无效.
我在Firebird Doc的https://firebirdsql.org/refdocs/langrefupd25-similar-to.html上找不到任何有关开始和结束的信息.
来自 Firebird 2.5 语言参考,SIMILAR TO文档:
\n\nSIMILAR TO 将字符串与 SQL 正则表达式模式匹配。\n与某些其他语言不同,该模式必须匹配整个\n字符串才能成功\xe2\x80\x94仅匹配子字符串是不够的。
\n
换句话说,正则表达式是多行的,并且 - 给定链接的文档 - 不提供开始/结束锚点,因为这些已经隐含了(但然后是整个字符串,而不是每行),因为不支持部分匹配。
\nFirebird 中的正则表达式实现符合 SQL 标准,该标准也没有定义开始/结束锚点。
\n根据您的要求,您可能需要类似的东西:
\n\'(abc 1001( %)?)|((% )?1001 abc)\'\nRun Code Online (Sandbox Code Playgroud)\n其中( %)?意味着可选地匹配空格和零个或多个任何字符。鉴于整个字符串必须匹配,这意味着它会找到空格或字符串末尾,与 类似(% )?。
如果您还需要在字符串中间找到它,您可能需要添加其他术语(但您的示例都没有建议这样做)。
\n或者,直接等价于(^|\\s)1001(\\s|$):
\'(%[[:WHITESPACE:]])?1001([[:WHITESPACE:]]%)?\'\nRun Code Online (Sandbox Code Playgroud)\n该答案的早期版本使用(% |)而不是(% )?,但鉴于空术语未记录也不属于标准的一部分,这可能是一个实现错误或充其量是一个未记录的功能。使用它需要您自担风险。
| 归档时间: |
|
| 查看次数: |
891 次 |
| 最近记录: |