将Perl正则表达式转换为SQL正则表达式

时间:2016-11-04 08:40:18

标签: sql regex perl firebird

我需要在Firebird数据库中使用Perl正则表达式。

Firebird RDBMS通过提供SIMILAR TO-condition来支持正则表达式。 不幸的是,Firebird中的SQL正则表达式语法与Perl语法不同。

是否可以将Perl正则表达式转换为SQL正则表达式? 我不需要完全兼容,但至少量词和字符类应该是可转换的。

2 个答案:

答案 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特殊字符:

  1. _&gt; \_
  2. %&gt; \%
  3. 然后,必须替换Perl特殊字符和字符类。

    1. .&gt; _
    2. \d&GT; [:digit:]
    3. \D&gt; [^[:digit:]]
    4. \w&gt; [^[:whitespace:]]
    5. \W&gt; [:whitespace:]
    6. \s&gt; [:whitespace:]
    7. \S&gt; [^[:whitespace:]]
    8. 注意:此处\使用默认的Perl转义字符SIMILAR TO

      随意,可以通过进一步替换来扩展我的答案。