如何在现有代码库中搜索新样式的c++ 11 for循环
How to search for new style C++11 for loops in an existing codebase
我正在使用RegexBuddy实用程序,使用regex
^s*fors.*:(?!:).*$
我将其解释为"搜索带有可选前导空白的行,文本'for',单个空白,然后包含冒号的行其余部分,但不是两个冒号在一起"。
这在大多数情况下是有效的,但是两个冒号的排除不起作用(它们通常是迭代器引用)。
这个搜索的正确正则表达式是什么?
for
语句之前不需要加空格,for
和左括号之间也不需要加空格。但是,好吧,这是我的尝试:
^s*fors*([^)]*[^:]:[^:][^)]*).*
注意:一般来说,用正则表达式准确解析c++代码几乎是不可能的。您需要一个有状态解析器来过滤掉嵌套的注释等。
我会使用这个正则表达式(它适用于grep
,不确定RegexBuddy):
^s*fors*(.+[^:]:[^:].+).*$
最重要的部分是在[^:]:[^:]
中,它只匹配一对括号内任意文本中的单个冒号(不是紧接在前面或后面的另一个冒号)。
EDIT RustyX的注释表明,只能匹配 range-for的正则表达式是不可能的,因为它总是可以被条件(?:)操作符的冒号欺骗。