0

我一直在尝试在 ruby​​ 中找到正则表达式以匹配 php 注释块:

/**
 * @file
 * lorum ipsum
 * 
 * @author  ME <me@localhost>
 * @version 00:00 00-00-0000
 */

任何人都可以帮助我尝试搜索很多,即使我发现的一些正则表达式已经在正则表达式测试器中工作,但是当我将它写在我的 ruby​​ 文件中时却没有。

这是我发现的最成功的正则表达式:

 (/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)

这是我的脚本的输出

file is ./test/123.rb so regex is ((^\s*#\s)+(.*?))+
i = 0
found: my first ruby comment
file is ./test/abc.php so regex is (/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)
i = 0
found: * 
i = 1
found: *

这是我必须这样做的代码:

 56   def self.extract_comments f
 57     if @regex[File.extname(f)]
 58       puts "file is " + f + " so regex is " + @regex[File.extname(f)]
 59       cur_rgx = Regexp.new @regex[File.extname(f)]
 60       matches = IO.read( f ).scan( cur_rgx )
 61       content = ""
 62       if ! matches.empty?
 63         # content = "== " + f + " ==\n"
 64         content += f + "\n"
 65         for i in 0...f.length
 66           content += "="
 67         end
 68         content += "\n"
 69         for i in 0...matches.length
 70           puts "i = " + i.to_s
 71           puts "found: " + matches[i][2].to_s
 72           content << matches[i][2].to_s + "\n"
 73         end
 74         content << "\n"
 75       end
 76     end
 77     content || '' # return something
 78   end
4

2 回答 2

1

似乎/\/\*.*?\*\//m应该这样做。这也是一个真正的 c 风格的注释块。

于 2012-10-19T12:17:58.913 回答
0

除非注释块中的每一行都以星号开头很重要,否则您可能需要尝试以下正则表达式:

/\/\*(?:[^*]+|\*+(?!\/))*\*\//

编辑:这是一个更严格的版本,它只会匹配格式与您的示例完全相同的评论:

/^( *)\/\*\*\n(?:\1 \*(?:[^*\n]|\*(?!\/))*\n)+\1 \*\//

此版本将仅匹配具有/***/位于不同行的注释。/**可以缩进任意数量的空格(但不能缩进其他空白字符),但其他行必须缩进比该/**行多一个空格。

编辑2:这是另一个版本:

/^([ \t]*)\/\*\*.*?\n(?:^\1 .*?\n)+^\1 \*\//

它允许混合使用制表符和空格(ew)进行缩进,但仍然要求所有行都符合一个缩进/**(加上一个空格)。

于 2012-10-19T11:14:18.973 回答