C++ 什么';regexec和pcre\u exec之间的区别是什么?

C++ 什么';regexec和pcre\u exec之间的区别是什么?,c++,c,regex,pcre,C++,C,Regex,Pcre,我有一个模式 在“123455”、“+123445”上进行测试,预期匹配 在“123+213”、“abc”上进行测试,预计不匹配 此模式适用于函数实现的pcre\u exec(),但不适用于regexec() 函数实现,这是ERE的一个主要超集(参见Perl的Perl的REs规范) \d符号不是POSIX ERE的专用符号(更不用说BRE了);它不是“一个数字”的意思。它在PCRE中的意思是“一个数字”。如果希望正则表达式在两种方言中都能工作,则需要使用[0-9]代替\d,并确保告诉regc

我有一个模式

  • 在“
    123455
    ”、“
    +123445
    ”上进行测试,预期匹配
  • 在“
    123+213
    ”、“
    abc
    ”上进行测试,预计不匹配
此模式适用于函数实现的
pcre\u exec()
,但不适用于
regexec()

函数实现,这是ERE的一个主要超集(参见Perl的Perl的REs规范)

\d
符号不是POSIX ERE的专用符号(更不用说BRE了);它不是“一个数字”的意思。它在PCRE中的意思是“一个数字”。如果希望正则表达式在两种方言中都能工作,则需要使用
[0-9]
代替
\d
,并确保告诉
regcomp()
编译ERE

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

请注意,字符串中的
\d
不是有效的C字符串文字<代码>\d
不是定义的转义序列。你的编译器应该警告你这一点。您需要在字符串文本中写入
\\d
,以获得正则表达式编译函数的
\d
"^+?[0-9]{3,20}$"