使用Ruby正则表达式,以特定格式查找每个文件的多个Objective-C注释

使用Ruby正则表达式,以特定格式查找每个文件的多个Objective-C注释,ruby,regex,comments,Ruby,Regex,Comments,我正在编写一个Ruby脚本,它使用正则表达式在Objective-C源代码文件中查找特定格式的所有注释 格式是 /* <Headline_in_caps> <#>: <Comment body> **/ 以下是Rubular上的示例: 我正在使用gsub处理整个文件字符串上的正则表达式,运行Ruby 1.9.3。我的另一个问题是gsub给了我Rubular忽略的东西,这是一种回归还是Rubular使用了一种不同的方法来给出我想要的东西 在这个关于多次

我正在编写一个Ruby脚本,它使用正则表达式在Objective-C源代码文件中查找特定格式的所有注释

格式是

/* <Headline_in_caps> <#>:
    <Comment body>
**/
以下是Rubular上的示例:

我正在使用
gsub
处理整个文件字符串上的正则表达式,运行Ruby 1.9.3。我的另一个问题是gsub给了我Rubular忽略的东西,这是一种回归还是Rubular使用了一种不同的方法来给出我想要的东西

在这个关于多次出现的问题中,答案是使用g作为全局选项,这在Ruby正则表达式中无效。

解决方案:

  • 使用
    '*/'
    拆分整个字符串(注释结尾)
  • 如果拆分只返回一个元素,则字符串中没有注释
  • 否则,对于每个标记(最后一个标记除外),使用RegExp
    %r{/\*(.*)$}
    (从“/*”开始直到标记结束)来捕获整个注释内容(您可以在这里使用更复杂的RegExp来捕获注释中的更多数据)
这可能不是最漂亮的解决方案,但它应该能解决问题。而且它不是防弹的,如果您的Objective-C源代码中有下面这行代码,我的解决方案将失败

 char *myString = "a comment /*  */";
解决方案:

  • 使用
    '*/'
    拆分整个字符串(注释结尾)
  • 如果拆分只返回一个元素,则字符串中没有注释
  • 否则,对于每个标记(最后一个标记除外),使用RegExp
    %r{/\*(.*)$}
    (从“/*”开始直到标记结束)来捕获整个注释内容(您可以在这里使用更复杂的RegExp来捕获注释中的更多数据)
这可能不是最漂亮的解决方案,但它应该能解决问题。而且它不是防弹的,如果您的Objective-C源代码中有下面这行代码,我的解决方案将失败

 char *myString = "a comment /*  */";
更改此项:
([\w\w\d\d]+)

对此:
([\w\w\d\d]+?)

这将导致正则表达式不贪婪,在看到下一次关闭时立即停止。(更新红宝石:)

另外,请注意
[\w\w\d\d]
完全匹配任何字符,并且可以简单地编写为
[\w\d]
。您也可以将主体与
[^*\/]
匹配,这也可以避免上述通过关闭进行匹配的问题。(更新的红宝石:)

更改此:
([\w\w\d\d]+)

对此:
([\w\w\d\d]+?)

这将导致正则表达式不贪婪,在看到下一次关闭时立即停止。(更新红宝石:)


另外,请注意
[\w\w\d\d]
完全匹配任何字符,并且可以简单地编写为
[\w\d]
。您也可以将主体与
[^*\/]
匹配,这也可以避免上述通过关闭进行匹配的问题。(更新红宝石:)

太棒了!我想要的是不贪婪。谢谢,太好了!我想要的是不贪婪。谢谢