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

How to search for new style C++11 for loops in an existing codebase

本文关键字:样式 c++ 循环 for 新样式 代码 搜索      更新时间:2023-10-16

我正在使用RegexBuddy实用程序,使用regex

 ^s*fors.*:(?!:).*$

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

这在大多数情况下是有效的,但是两个冒号的排除不起作用(它们通常是迭代器引用)。

这个搜索的正确正则表达式是什么?

for语句之前不需要加空格,for和左括号之间也不需要加空格。但是,好吧,这是我的尝试:

^s*fors*([^)]*[^:]:[^:][^)]*).*


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

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

^s*fors*(.+[^:]:[^:].+).*$

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

EDIT RustyX的注释表明,只能匹配 range-for的正则表达式是不可能的,因为它总是可以被条件(?:)操作符的冒号欺骗。