[英]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.