簡體   English   中英

將Perl正則表達式轉換為SQL正則表達式

[英]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特殊字符:

  1. _ > \\_
  2. % > \\%

然后,必須替換Perl特殊字符和字符類。

  1. . > _
  2. \\d > [:digit:]
  3. \\D > [^[:digit:]]
  4. \\w > [^[:whitespace:]]
  5. \\W > [:whitespace:]
  6. \\s > [:whitespace:]
  7. \\S > [^[:whitespace:]]

注意:默認的Perl轉義字符\\在此處用於SIMILAR TO

請隨時提出更多可能的替代方案,以擴展我的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM