为什么这个正则表达式在pcregrep中匹配,而在我的c++代码中不匹配?
Why does this regular expression match in pcregrep but not within my c++ code?
我有一个正则表达式,可以完美地与pcregrep
:
pcregrep -M '([a-zA-Z0-9_&*]+)((+)([a-zA-Z0-9_ &*]+)()+)(n)({)'
现在我试图在我的c++代码中包含这个正则表达式,但它不匹配(包括转义):
char const *regex = "([a-zA-Z0-9_&*]+)\(+([a-zA-Z0-9_ &\*]+)\)+(?>n+)\{+";
re = pcre_compile(regex, PCRE_MULTILINE, &error, &erroffset, 0);
我试图找到这样的函数体(该段是十六进制的0a
):
my_function(char *str)
{
为什么它的工作与pcregrep
,而不是在c++代码?
您的第一个正则表达式:
( [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)+
。
另一个选择可能是尝试换行结构(我认为它的R
)
相反(在最新版本的pcre上可用)。
如果这行不通,那就换个方法。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 我的字符计数代码计算错误.为什么
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- cmake在我的项目中所需的所有静态库都不成功
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 为什么我的for循环不能正确获取argv
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 0-1背包代码中的错误.我的代码中有什么错误
- 当我的阵列太大时出现分段错误
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 为什么二进制搜索在我的测试中不起作用
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- OpenGL在启用深度测试时不会丢弃我的碎片
- 为什么我的 std::ref 无法按预期工作?
- clang整洁10忽略了我的NOLINT命令
- 为什么我的删除节点函数实际上没有删除节点?