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

问题描述:

我需要在Firebird数据库中使用Perl正则表达式。将Perl正则表达式转换为SQL正则表达式

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

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

我来到了以下替换规则(该命令的事项),以最Perl的正则表达式转换为SQL语法:

起初,SQL特殊字符都被转义:

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

然后,Perl的特殊字符和字符CLA sses必须被替换。

  1. .>_
  2. \d>[:digit:]
  3. \D>[^[:digit:]]
  4. \w>[^[:whitespace:]]
  5. \W>[:whitespace:]
  6. \s>[:whitespace:]
  7. \S>[^[:whitespace:]]
  8. 注意:默认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