如何在现有代码库中搜索新的C ++ 11 for循环

时间:2016-09-01 08:36:55

标签: c++ regex c++11

我正在使用RegexBuddy实用程序和正则表达式

 ^\s*for\s.*:(?!:).*$

我将其解释为'搜索具有可选前导空格的行,文本' for',单个空格,然后该行的其余部分包含冒号,但不包含两个冒号在一起'。

这主要起作用,但两个冒号排除不是(它们通常是迭代器引用)。

此搜索的正确正则表达是什么?

2 个答案:

答案 0 :(得分:1)

for语句不必以空格开头,for和左大括号之间也不需要空格。但好的,这是我的尝试:

^\s*for\s*\([^)]*[^:]:[^:][^)]*\).*

注意:通常,使用正则表达式准确解析C ++代码几乎是不可能的。您需要一个有状态解析器来过滤嵌套注释等。

答案 1 :(得分:0)

我会使用这个正则表达式(它适用于grep,不确定RegexBuddy):

^\s*for\s*(.\+[^:]:[^:].\+).*$

基本部分在[^:]:[^:]中,它只匹配一对括号内的任意文本中的单个冒号(不是紧接在另一个冒号之前或之后)。

编辑 RustyX's comment建议不能使用仅匹配 范围的正则表达式,因为它总是被条件的冒号欺骗(?:) operator。