Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式检查C代码的括号_Regex_Linux - Fatal编程技术网

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

Regex 正则表达式检查C代码的括号,regex,linux,Regex,Linux,我对regex很陌生,我只使用它们进行搜索。所以我和白鹭一起玩,但是白鹭有一些限制 对于linux,有什么好的正则表达式工具吗?我知道有sed,但它通常用于搜索和替换场景。我可以使用sed只搜索我的文件吗?如果是,怎么做 说到我的具体问题,我需要在C源代码中搜索实例,其中附加的括号用于if语句 if((a==b))应该匹配,而if(a==b)不应该匹配。 if(a&&((b||c))应该匹配,而if(a&&(b|c))不应该匹配 我希望它是简单的,我会添加更多的情况下,以后像==等。这在正则表达

我对regex很陌生,我只使用它们进行搜索。所以我和白鹭一起玩,但是白鹭有一些限制

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

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

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


我希望它是简单的,我会添加更多的情况下,以后像
=
=等。

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

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

这在正则表达式中是不可能的(至少不是靠他们自己),因为他们无法跟踪任意级别的括号嵌套。@Oli Charlesworth,你应该回答这个问题,因为这就是答案。好的,关于sed作为搜索工具而不是搜索和替换它呢???@JeremyStein:我已经做到了!我最初的犹豫是因为通常是一个“好答案”应该附带一个建议来代替。这在正则表达式中是不可能的(至少不能单独使用),因为它们无法跟踪任意级别的括号嵌套。@Oli Charlesworth,你应该回答这个问题,因为这就是答案。好的,关于sed作为搜索工具而不是搜索和替换的问题???@JeremyStein:我已经做到了!我最初的犹豫是因为通常是“好答案”应该附带一个建议来代替。要补充这个答案,即使在正则表达式之外也要小心尝试。确保检测到真正“不必要”的括号集的唯一(实际)方法是看到双开双闭,例如,
(…)
。非正则表达式的解决方案可能会搜索
/\(\s*\(/
),然后逐字符读取,计算级别,直到在级别0处找到一个右括号,如果我们匹配
/\)\s*\)/
,那么我们可能知道这是一对多余的括号——当然,除了我们没有预料到的东西,例如注释中的一个错误括号或表情符号;)要添加到这个答案中,即使在正则表达式之外,也要小心尝试。确保您检测到一组真正“不必要”的括号的唯一(实际)方法是看到双开双闭,例如,
(…)
。非正则表达式唯一的解决方案可能会搜索
/\(\s*\(/
),然后逐字符读取,计算级别,直到在级别0处找到一个右括号,如果我们匹配
/\)\s*\)/
,那么我们可能知道这是一对多余的括号——当然,除了我们没有预料到的事情,例如,注释中的括号或表情符号;)