2011-09-26 57 views
2

在工作中,我需要为C注释(/ *)创建perl样式正则表达式,以留下代码中留下的注释。我们的业务分析师提出了新的要求,这些要求都以“BA”开头,我应该以某种方式扫描注释以查找这些实例。我对正则表达式非常不熟悉,并且在阅读了更多关于它们的信息之后,我很失望如何仅使用BA字符串来定位注释块。C语言的Perl风格正则表达式

任何指导将不胜感激。

+0

因此您正在查找包含BA的注释?你的意思是这样?:'/ *东西BA东西* /'。请举例说明您需要匹配的内容。你有没有尝试先搜索? (匹配C注释是一个已经被问及并回答的问题。) – ridgerunner

+2

@ user964210,请注意,没有_single_正则表达式模式不会在这样的东西上跳转:'s =“foo/* bar”;' (即字符串文字中的'/ *')。 –

回答

3

我不知道的为C注释任何奇怪的转义规则,所以我觉得你只是想这样的事情:

/\/\*.*?\/\*/s 

s标志意味着该.也将匹配回车,所以评论可以跨越多行。

只匹配开始“BA”的评论,你会想:

/\/\*BA.*?\/\*/s 

考虑添加i标志,如果该“BA”部分可以是小写。

+1

其实我想你想要'/ s'作为你的后缀。 '/ m'表示'^'和'$'将匹配任何行的开始或结束,而不是整个模式,这在这里没有太大的好处。 –

+0

@PlatinumAzure - 哎呀!当然,你是对的。谢谢。 –

+0

完美,这正是我所需要的。对于这样的情况,有没有一种简单的方法来否定正则表达式?例如,如果我想匹配所有不包含BA的评论? – user964210

0
find . -regex ".*\.[ch]" | xargs grep -regex "/\* *BA" 

,做什么:

  • 找到你所有的C源文件和头文件。
  • 在这些文件中搜索“/ *”,然后搜索任意数量的空白,然后搜索“BA”。