将Perl正则表达式转换为SQL正则表达式
问题描述:
我需要在Firebird数据库中使用Perl正则表达式。将Perl正则表达式转换为SQL正则表达式
Firebird RDBMS通过提供SIMILAR TO
-condition确实支持正则表达式。 不幸的是,Firebird中的SQL正则表达式语法与Perl语法不同。
是否可以将Perl正则表达式转换为SQL正则表达式? 我不需要完全兼容,但至少量词和字符类应该是可转换的。
答
我来到了以下替换规则(该命令的事项),以最Perl的正则表达式转换为SQL语法:
起初,SQL特殊字符都被转义:
-
_
>\_
-
%
>\%
然后,Perl的特殊字符和字符CLA sses必须被替换。
-
.
>_
-
\d
>[:digit:]
-
\D
>[^[:digit:]]
-
\w
>[^[:whitespace:]]
-
\W
>[:whitespace:]
-
\s
>[:whitespace:]
-
\S
>[^[:whitespace:]]
注意:默认Perl的转义字符\
用于SIMILAR TO
这里。
请随时通过进一步的可能替代扩展我的答案。
答
[我]不需要完全兼容,但至少量词和字符类应该是可转换的。
你很幸运,你可以使用字符类,?
,*
,+
,{exact_occurrences_number}
,{min,}
,{min,max}
量词与Firebird SIMILAR TO
regex syntax。
唯一的麻烦是Unicode的类别/属性类,你可以只使用POSIX字符类有:
<predefined class name> ::= ALPHA | UPPER | LOWER | DIGIT
| ALNUM | SPACE | WHITESPACE