我需要在Firebird數據庫中使用Perl正則表達式。將Perl正則表達式轉換爲SQL正則表達式
Firebird RDBMS通過提供SIMILAR TO
-condition確實支持正則表達式。 不幸的是,Firebird中的SQL正則表達式語法與Perl語法不同。
是否可以將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