C++ 为什么这个正则表达式在pcregrep中匹配,而在我的c++;密码?

C++ 为什么这个正则表达式在pcregrep中匹配,而在我的c++;密码?,c++,regex,pcre,multiline,pcregrep,C++,Regex,Pcre,Multiline,Pcregrep,我有一个正则表达式,可以与pcregremp完美配合使用: pcregrep -M '([a-zA-Z0-9_&*]+)(\(+)([a-zA-Z0-9_ &\*]+)(\)+)(\n)(\{)' 现在我试图在我的C++代码中包含这个正则表达式,但是它不匹配(包含的逃逸): 我试图找到这样的函数体(该段落是用十六进制表示的0a): 为什么它使用 pCREGRIP而不在C++代码中?< p>您的第一正则表达式: ( [a-zA-Z0-9_&*]+ )

我有一个正则表达式,可以与
pcregremp
完美配合使用:

pcregrep -M '([a-zA-Z0-9_&*]+)(\(+)([a-zA-Z0-9_ &\*]+)(\)+)(\n)(\{)'
现在我试图在我的C++代码中包含这个正则表达式,但是它不匹配(包含的逃逸):

我试图找到这样的函数体(该段落是用十六进制表示的
0a
):

为什么它使用<代码> pCREGRIP而不在C++代码中?

< p>您的第一正则表达式:

 ( [a-zA-Z0-9_&*]+ )           # (1)
 ( \(+ )                       # (2)
 ( [a-zA-Z0-9_ &\*]+ )         # (3)
 ( \)+ )                       # (4)
 ( \n )                        # (5)
 ( \{ )                        # (6)
你的第二个正则表达式:

 ( [a-zA-Z0-9_&*]+ )           # (1)
 \(+
 ( [a-zA-Z0-9_ &\*]+ )         # (2)
 \)+
 (?> \n+ )
 \{+
不同的捕获组和不必要的原子组除外
(?>)

有一件事明显不同:

第二个正则表达式中的最后一个换行符和大括号有
+
量词。
但这是1或更多,所以我认为第一个正则表达式应该是第二个正则表达式的子集

不明显的区别在于不知道文件是否以翻译模式打开

您通常可以用
\r?\n
代替
\n

(甚至
(?:\r?\n | \r)

因此,如果要量化换行符,它将是
(?:\r?\n)+
(?:\r?\n |\r)+

另一个选项可能是尝试linebreak构造(我认为它的
\R

相反(可在最新版本的pcre上获得)


如果这不起作用,那就是另外一回事。

您使用的是哪个编译器版本?例如,GCC 4.9或更新版本提供了完整的正则表达式支持。g++4.9.2-10ubuntu13I从未见过正则表达式中的
(?>\n+)
?>
是什么意思?为什么在C++代码中使用它,而不是在PCReReGP中使用它?我也可以使用(\r+)命令。但是(\n+)不起作用,尽管段落是
0a
。我想多行可能有点问题。先生,你真是个天才<代码>(?:\r?\n)+执行此任务。谢谢
 ( [a-zA-Z0-9_&*]+ )           # (1)
 ( \(+ )                       # (2)
 ( [a-zA-Z0-9_ &\*]+ )         # (3)
 ( \)+ )                       # (4)
 ( \n )                        # (5)
 ( \{ )                        # (6)
 ( [a-zA-Z0-9_&*]+ )           # (1)
 \(+
 ( [a-zA-Z0-9_ &\*]+ )         # (2)
 \)+
 (?> \n+ )
 \{+