正则表达式检查括号中的C代码

Kam*_*ath 1 regex linux

我是正则表达式的新手,我只使用它们进行搜索.所以我玩egrep,但有了egrep,我看到了一些限制.

对于Linux有什么好的正则表达式工具?我知道有sed但它通常用于场景搜索和替换.我可以使用sed只搜索我的文件吗?如果有,怎么样?

根据我的具体问题,我需要在C源代码中搜索实例,其中附加括号用于if语句.

if (( a == b))应该匹配,if (a == b)不应该匹配.
if(a && ((b||c)))应该匹配,if(a && (b||c))不应该匹配.

我希望它很简单,我会在以后添加其他案例等>= !=.

Oli*_*rth 5

这对于正则表达式是不可能的(至少不是它们自己的),因为它们无法跟踪括号的任意嵌套级别.

  • 要添加到这个答案,请小心尝试在正则表达式之外.确保你检测到一个真正"不必要"的括号集的唯一(实用)方法是通过双关闭看到双开,例如``((...))``.一个非正则表达式的解决方案可能会搜索``/ \(\ s*\(/``,然后通过char读取char,计算级别,直到在级别0找到一个右括号,如果我们匹配``/\)\ s*\)/``,然后我们_might_知道这是一对冗余的括号 - 当然我们没有预料到的事情,例如评论中的一个假的括号或表情符号;) (2认同)