如何验证正则表达式是否兼容?

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

MysQL使用亨利·斯宾塞(Henry Spencer)实施正则表达式,该表达式旨在符合POSIX 1003.2。 MySQL使用扩展版本来支持SQL语句中的正则表达式模式匹配操作。

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

\w

\d

  • (?:
    
    
  • 它们被认为是无效的,或者只是被MySQL忽略。可能还有另一个。 我知道可以使用java
    Pattern
    类来验证正则正则是有效的:
  • Pattern.compile(regex);
    如果正则表达式无效,则返回例外。但是,正如我说的那样,我正在尝试验证正则态度是否仅兼容POSIX,因此我可以在保存数据库中的信息之前验证REGEX输入。
        
syntax类似于

\w

\d

(?:)

,在与Perl兼容的正则表达式(PCRE)中支持,而不是在Posix中。诸如
egrep
支持增强功能的工具可以兼容,但这并不能使它们成为posix。

从人页面for rre_format(7)

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

增强功能

  
  
当reg_enhanced标志传递给regcomp()变体之一时,激活了其他功能。 就像佩尔(1)和python(1)等脚本语言中增强的正则实现一样,这些附加功能可能与IEEE STD 1003.2(``posix.2')标准相冲突。在需要便携性的情况下,请在需要谨慎的情况下(包括使用先前的正则实现的Mac OS X的过去版本)。
在“扩展”和“增强”之间有一个区别。扩展是指POSIX正则表达特征的水平。增强是指PCRE支持但不支持Posix的语法。

您可以在Posix语法中做许多您想要的事情:

\w

,使用[[:alnum:]_]

\d

,使用

[[:digit:]]

语法是不必要的,因为MySQL

(?:)

无论如何都不支持捕获组。您可以简单地将

REGEXP
    用于分组。
  • 我不认为有必要使用Java验证器来解析您的正则表达式。您应该能够阅读文档,并仅使用该文档中出现的功能。

    我的意思是,正式表达语法不是那么复杂。您可以在邮政注释上创建快速引用表。
        
    
    
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.