验证正则表达式是否与Posix兼容

问题描述 投票:0回答:1

我想知道是否有一种方法可以验证正则表达式是否使用Java与Posix兼容。

我正在使用MySQL 5.7版本和I can't use函数的REGEXP“正常”正则表达式:

MySQL使用Henry Spencer的正则表达式实现,旨在实现POSIX 1003.2。 MySQL使用扩展版本来支持SQL语句中的正则表达式模式匹配操作。

例如,如果我尝试使用其中一些标记:

  • \w
  • \d
  • (?:

它们被认为是无效的,或者被MySQL忽略。可能还有其他。

我知道Java Pattern类可用于使用以下命令验证正则表达式是否有效:

Pattern.compile(regex);

如果正则表达式无效,则返回异常。但是,正如我所说,我正在尝试验证正则表达式是否仅与Posix兼容,因此我可以在将信息保存到数据库之前验证正则表达式的输入。

java mysql regex posix mysql-5.7
1个回答
0
投票

\w\d(?:)相似的语法在Perl兼容的正则表达式(PCRE)中受支持,而在POSIX中不受支持。诸如egrep之类的工具都支持增强的兼容性功能,但这并不能使其成为POSIX。

来自re_format(7)的手册页:

增强功能

当将REG_ENHANCED标志传递给regcomp()变体之一时,将激活其他功能。像perl(1)和python(1)等脚本语言中的增强型正则表达式实现一样,这些其他功能可能在某些方面与IEEE Std 1003.2(``POSIX.2'')标准冲突。在需要可移植性的情况下(包括使用以前的正则表达式实现的Mac OS X的早期版本),请谨慎使用此选项。

对于\w,请使用[[:alnum:]_]

对于\d,请使用[[:digit:]]

(?:)语法是不必要的,因为MySQL REGEXP仍然不支持捕获组。您可以简单地使用()进行分组。

© www.soinside.com 2019 - 2024. All rights reserved.