我需要在Firebird数据库中使用Perl正则表达式。
Firebird RDBMS通过提供SIMILAR TO
-condition来支持正则表达式。
不幸的是,Firebird中的SQL正则表达式语法与Perl语法不同。
是否可以将Perl正则表达式转换为SQL正则表达式? 我不需要完全兼容,但至少量词和字符类应该是可转换的。
答案 0 :(得分:2)
[我]不需要完全兼容,但至少量词和字符类应该是可转换的。
您很幸运,您可以使用字符类,AccessDenied
,?
,*
,+
,{exact_occurrences_number}
,{min,}
量词Firebird SIMILAR TO
regex syntax
唯一的麻烦是Unicode类别/属性类,您只能在那里使用POSIX字符类:
{min,max}
<predefined class name> ::= ALPHA | UPPER | LOWER | DIGIT
答案 1 :(得分:1)
我发现以下替换规则(顺序很重要)将大多数Perl正则表达式转换为SQL语法:
首先,必须转义SQL特殊字符:
_
&gt; \_
%
&gt; \%
然后,必须替换Perl特殊字符和字符类。
.
&gt; _
\d
&GT; [:digit:]
\D
&gt; [^[:digit:]]
\w
&gt; [^[:whitespace:]]
\W
&gt; [:whitespace:]
\s
&gt; [:whitespace:]
\S
&gt; [^[:whitespace:]]
注意:此处\
使用默认的Perl转义字符SIMILAR TO
。
随意,可以通过进一步替换来扩展我的答案。