正则表达式:匹配未注释掉的某些代码

时间:2011-01-21 18:01:04

标签: regex

我在1000行代码中寻找所有代码分支点。也就是说,我想找到{if,elseif,for,switch,while等}的每一次出现,它们在评论“%”后面

如何?


实施例

if(x > 50)匹配,如果

func(x) % What do I tell my boss if this doesn't work?中的匹配


更新

Justin'jjnguy'Nelson带来了一个使用基本正则表达式的答案。 (感谢贾斯汀)但是我已经预料到需要正则表达式lookaround的解决方案。有没有人有一个使用环顾的解决方案?我在尝试工作时遇到了麻烦。

2 个答案:

答案 0 :(得分:3)

如果您不假设多行注释,并且在字符串文字中没有注释字符,那么这可以非常简单:

/^[^%]*(if|elseif|for|switch|while|etc)/

只要在他们之前没有%,这就会匹配给定的关键字。

答案 1 :(得分:0)

这是我的看法,可能是错的。
您必须使用特定于该语言的解析器 另一方面,评论通常遵循严格的行为顺序,
这与转义/非转义,到行尾,行跨越等有关。

这些规则通常可以使用正则表达式,因为
评论本身并不遵循语言规则。虽然它不容易,但它的可行性 在他们被剥离后,您可以申请另一个正则表达式,以便找到左 关键字。