Java 验证正则表达式是否与Posix兼容
我想知道是否有一种方法可以使用Java验证正则表达式是否与Posix兼容 我正在使用MySQL 5.7版本和带有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
REGEXP
函数的“普通”正则表达式:
MySQL使用Henry Spencer的正则表达式实现,旨在与POSIX 1003.2保持一致。MySQL使用扩展版本支持SQL语句中的正则表达式模式匹配操作
如果我尝试使用其中一些令牌,例如:
\w
\d
(?:
模式
类可用于验证正则表达式是否有效,使用:
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不是一种解释性语言,几乎肯定是这项工作的错误工具。你可能会发现这很有用。但也许不是,我不知道有什么现成的方法来验证正则表达式是否是posix兼容。主要是因为大多数工具都会尝试优雅地失败。如果您告诉我们您想要哪种posix标准,也可能会有所帮助。我不知道他们上次更新posix中的正则表达式是什么时候。但他们上次更新posix是在2017年。