[英]Convert Perl regular expressions to SQL regular expressions
我需要在Firebird数据库中使用Perl正则表达式。
Firebird RDBMS通过提供SIMILAR TO
condition来支持正则表达式。 不幸的是,Firebird中的SQL正则表达式语法与Perl语法不同。
是否可以将Perl正则表达式转换为SQL正则表达式? 我不需要完全兼容,但至少量词和字符类应该是可转换的。
[I]不需要完全兼容,但是至少量词和字符类应该是可转换的。
您很幸运,可以使用字符类, ?
, *
, +
, {exact_occurrences_number}
, {min,}
, {min,max}
量词使用Firebird SIMILAR TO
正则表达式语法 。
唯一的麻烦是Unicode类别/属性类,您只能在其中使用POSIX字符类:
<predefined class name> ::= ALPHA | UPPER | LOWER | DIGIT
| ALNUM | SPACE | WHITESPACE
我遇到了以下替换规则(顺序很重要),可以将大多数Perl正则表达式转换为SQL语法:
首先,必须转义SQL特殊字符:
_
> \\_
%
> \\%
然后,必须替换Perl特殊字符和字符类。
.
> _
\\d
> [:digit:]
\\D
> [^[:digit:]]
\\w
> [^[:whitespace:]]
\\W
> [:whitespace:]
\\s
> [:whitespace:]
\\S
> [^[:whitespace:]]
注意:默认的Perl转义字符\\
在此处用于SIMILAR TO
。
请随时提出更多可能的替代方案,以扩展我的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.