regexec和pcre_exec有什么区别?

时间:2018-11-28 03:39:37

标签: c++ c regex pcre

我有一个模式

"^\+?\d{3,20}$"
  • 测试“ 123455”,“ +123445”(预期匹配)。
  • 在“ 123+213”,“ abc”上进行测试,期望没有匹配项。

此模式适用于pcre_exec(),但不适用于regexec()

1 个答案:

答案 0 :(得分:4)

regexec()函数实现POSIX Basic Regular Expressions (BRE) and Extended Regular Expressions (ERE)

pcre_exec()函数实现Perl-Compatible Regular Expressions,它是ERE的主要超集(有关Perl的Perl RE的规范,请参见perlre)。

\d表示法对POSIX ERE并不特殊(更不用说BRE);这并不意味着“数字”。它确实在PCRE中表示“数字”。如果希望正则表达式在两种方言中都起作用,则需要使用[0-9]代替\d,并确保告知regcomp()来编译ERE。

"^+?[0-9]{3,20}$"