我一直在尝试在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
答案 0 :(得分:1)
好像/\/\*.*?\*\//m
应该这样做。
这也是一个c风格的评论块。
答案 1 :(得分:0)
除非注释块内的每一行以星号开头很重要,否则您可能想尝试使用此正则表达式:
/\/\*(?:[^*]+|\*+(?!\/))*\*\//
编辑:这是一个更严格的版本,它只会匹配格式与您的示例完全相同的评论:
/^( *)\/\*\*\n(?:\1 \*(?:[^*\n]|\*(?!\/))*\n)+\1 \*\//
此版本仅匹配在单独行中/**
和*/
的评论。 /**
可以缩进任意数量的空格(但没有其他空白字符),但其他行必须缩进比/**
多一个空格线。
编辑2:这是另一个版本:
/^([ \t]*)\/\*\*.*?\n(?:^\1 .*?\n)+^\1 \*\//
它允许混合使用制表符和空格(ew)进行缩进,但仍然要求所有行符合/**
缩进(加上单个空格)。