【问题标题】:Perl style regular expression for C commentsC 注释的 Perl 样式正则表达式
【发布时间】:2011-11-25 06:04:39
【问题描述】:

在工作中,我需要为 C cmets (/*) 创建一个 perl 样式的正则表达式,用于我们代码中留下的 cmets。我们的业务分析师有新的要求,这些都以“BA”开头,我应该以某种方式扫描 cmets 以找到这些实例。我对正则表达式非常不熟悉,在阅读了更多关于它们的信息后,我不知道如何仅使用 BA 字符串来定位评论块。

任何指导将不胜感激。

【问题讨论】:

  • 所以您正在寻找包含 BA 的 cmets?你的意思是这样的?:/* stuff BA stuff */。请举例说明您需要匹配的内容。您是否尝试先进行搜索? (匹配 C 注释是一个已被提出并回答的问题。)
  • @user964210,请注意,没有 single 正则表达式模式不会遇到这样的事情:s = "foo /* bar";(即字符串文字中的 /* )。

标签: c regex comments


【解决方案1】:

我不知道 C cmets 有任何奇怪的转义规则,所以我认为你只想要这样的东西:

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

s 标志意味着. 也将匹配回车,因此 cmets 可以跨多行。

要仅匹配以“BA”开头的 cmets,您需要:

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

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

【讨论】:

  • 其实我想你想要/s作为你的后缀。 /m 表示 ^$ 将匹配任何行的开头或结尾而不是整个模式,这在这里没有多大用处。
  • 完美,这正是我所需要的。对于这样的情况,是否有一种简单的方法来否定正则表达式?例如,如果我想匹配所有不包含 BA 的 cmets?
  • @user964210 - 试试/\/\*(?!BA).*?\/\*/s/\/\*(?!\s*BA).*?\/\*/s
【解决方案2】:
find . -regex ".*\.[ch]" | xargs grep -regex "/\* *BA"

这是做什么的:

  • 查找所有 C 源文件和头文件。
  • 在每个文件中搜索“/*”,然后是任意数量的空格,然后是“BA”。

【讨论】:

    猜你喜欢
    • 2015-02-25
    • 1970-01-01
    • 2013-04-16
    • 2010-10-02
    • 1970-01-01
    • 2014-04-18
    • 2014-07-26
    • 1970-01-01
    • 2014-12-17
    相关资源
    最近更新 更多