我需要在Firebird数据库中使用Perl正则表达式。
Firebird通过提供一个-condition来支持正则表达式。不幸的是,Firebird中的SQL正则表达式语法与Perl语法不同。
是否有可能将Perl正则表达式转换为SQL正则表达式?i不需要完全兼容,但至少应该可以转换量词和字符类。
发布于 2016-11-04 12:06:02
我使用了以下替换规则(顺序重要)将大多数Perl正则表达式转换为SQL语法:
首先,必须转义SQL特殊字符:
_ > \_% > \%然后,必须替换Perl特殊字符和字符类。
. > _\d> [:digit:]\D > [^[:digit:]]\w > [^[:whitespace:]]\W > [:whitespace:]\s > [:whitespace:]\S > [^[:whitespace:]]注意:这里使用默认的Perl转义字符\来表示SIMILAR TO。
请放心,用更多的可能的替代来扩展我的回答。
发布于 2016-11-04 08:55:17
我不需要完全兼容,但至少数量和字符类应该是可转换的。
幸运的是,您可以在 regex syntax中使用字符类、?、*、+、{exact_occurrences_number}、{min,}、{min,max}量词。
唯一的问题是Unicode类别/属性类,您只能在那里使用POSIX字符类:
<predefined class name> ::= ALPHA | UPPER | LOWER | DIGIT| ALNUM | SPACE | WHITESPACE
https://stackoverflow.com/questions/40418312
复制相似问题