0

我已经定义了以下 reg。使用 boost 正则表达式库的表达式

"([[:digit:]]{1,})([[:blank:]]*\\[label=\")([[:print:]]*)(\\([[:print:]]*\\)\\([[:print:]]+\\))(\"];)"

regex_search用来提取我感兴趣的数据match[3]:以下字符串成功,结果MulOp

0 [label="MulOp(   text1 )(depth =1)"];

但是它对于以下字符串失败并找到结果CALL( %text1,当我希望结果只是CALL

8 [label="CALL(   %text1(text2) text3 )(depth =2)"];

你能告诉我如何定义将匹配这两种情况的通用正则表达式吗

4

1 回答 1

1

问题来自目标字符串中的“(text2)”。这增加了'('第一个中不存在的字符,所以([[:print:]]*)吃第一个'('。您需要'('从第一场比赛中排除。将其替换为类似([^(]*)if 您的语法将始终是目标名称后跟'('. 除此之外很难说,因为你还没有真正定义你正在寻找的是什么。(我不会通过建议仅通过两个示例来简单化这一点,匹配您想要的内容是微不足道的:只需搜索“MulOp”和“CALL”,如果其中任何一个存在,则返回它)

于 2013-02-03T20:45:12.560 回答