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

Java 验证正则表达式是否与Posix兼容,java,mysql,regex,posix,mysql-5.7,Java,Mysql,Regex,Posix,Mysql 5.7,我想知道是否有一种方法可以使用Java验证正则表达式是否与Posix兼容 我正在使用MySQL 5.7版本和带有REGEXP函数的“普通”正则表达式: MySQL使用Henry Spencer的正则表达式实现,旨在与POSIX 1003.2保持一致。MySQL使用扩展版本支持SQL语句中的正则表达式模式匹配操作 如果我尝试使用其中一些令牌,例如: \w \d (?: 它们被认为是无效的,或者只是被MySQL忽略了。可能还有其他的 我知道Java模式类可用于验证正则表达式是否有效,使用: Pa

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

我正在使用MySQL 5.7版本和带有
REGEXP
函数的“普通”正则表达式:

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

如果我尝试使用其中一些令牌,例如:

  • \w
  • \d
  • (?:
它们被认为是无效的,或者只是被MySQL忽略了。可能还有其他的

我知道Java
模式
类可用于验证正则表达式是否有效,使用:

Pattern.compile(regex);

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

类似于
\w
\d
(?:)
的语法在Perl兼容的正则表达式(PCRE)中受支持,不在POSIX中。像egrep这样的工具支持增强的兼容性功能,但这并不能使它们成为POSIX

re_格式(7)的手册页:

增强功能

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

“extended”和“enhanced”之间有区别。“extended”是指POSIX正则表达式功能的级别。enhanced是指PCRE支持但POSIX不支持的语法

您可以在POSIX语法中执行许多您想要的操作:

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

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

  • (?:)
    语法是不必要的,因为MySQL
    REGEXP
    无论如何都不支持捕获组。您只需使用
    ()
    进行分组

我认为没有必要使用Java验证器来解析正则表达式,您应该能够阅读文档并只使用文档中出现的功能


我的意思是,真的,正则表达式语法没有那么复杂。你可以在便利贴上创建一个快速参考表。

Java不是一种解释性语言,几乎肯定是这项工作的错误工具。你可能会发现这很有用。但也许不是,我不知道有什么现成的方法来验证正则表达式是否是posix兼容。主要是因为大多数工具都会尝试优雅地失败。如果您告诉我们您想要哪种posix标准,也可能会有所帮助。我不知道他们上次更新posix中的正则表达式是什么时候。但他们上次更新posix是在2017年。