正则表达式提取括号内的所有内容

Posted

技术标签:

【中文标题】正则表达式提取括号内的所有内容【英文标题】:Regex expression to extract everything inside brackets 【发布时间】:2013-08-14 16:04:40 【问题描述】:

我需要从 C++ 中的以下字符串中提取括号 () 内的内容;

#82=IFCCLASSIFICATIONREFERENCE($,'E05.11.a','Rectangular',#28);

我尝试遵循正则表达式,但它给出的输出带有完整的括号。

std::regex e2 ("\\((.*?)\\)");
if (std::regex_search(sLine,m,e2))

输出应该是:

 $,'E05.11.a','Rectangular',#28

【问题讨论】:

只是为了一般知识,这些被称为括号。 .*? 应该是[^\)]*,不应该。 【参考方案1】:

您要查找的结果应该在第一个匹配的子表达式中,即包含在[[1].first, m[1].second) 区间内。

这是因为您的正则表达式也匹配括号,但您指定了分组子表达式,即(.*?)。这是一些documentation的起点

【讨论】:

【参考方案2】:

使用前瞻:"(?<=\\()[^)]*?(?=\\))"。请注意,因为这不适用于嵌套括号。

您也可以使用backreferences。

【讨论】:

【参考方案3】:
(?<=\().*(?=\))

试试这个,我只在一台测试仪上测试过,但它有效。它基本上会查找 ( 之后和 ) 之前的任何字符,但不包括它们。

【讨论】:

以上是关于正则表达式提取括号内的所有内容的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式提取括号中的数据

正则表达式捕获第一个和最后一个括号内的所有内容[重复]

R stringr 正则表达式提取括号内的字符

怎么用正则表达式匹配中括号内的字符

js 正则表达式获取小括号内的内容,不含括号

正则表达式如何匹配提取括号中的内容