繁体   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