使用正则表达式在多个开始和结束标记之间查找内容

时间:2012-03-27 14:24:09

标签: ruby regex

我正在尝试在包含代码和自定义注释标记的文件上运行正则表达式(Ruby)。我想找到(/*+ ... +*/),单行或多行之间的所有文本。

假设:

/*+
   # Testing Documentation #
   ## Another Documentation Line ##
   This is also picked up
+*/
Some code here that is ignored
/*+ # More documentation # +*/

我希望在/*+ ... +*/

的打开和关闭之间匹配每组文本

我尝试了以下reg ex,它对单行示例很有用。但是如果我启用了多行选项,它会在第一个匹配和最后一个匹配之间选择所有内容,而不是匹配两个或更多个组。

/(?<=\/\*\+)(.*)(?=\+\*\/)/

由于

2 个答案:

答案 0 :(得分:3)

让匹配在中间非贪婪((.*?))。这是Rubular的永久链接:

http://rubular.com/r/0SuNNJ3vy6

我使用的表达式是/(\/\*\+)(.*?)(\+\*\/)/m,根据您的需要进行微调。

text.scan(/(\/\*\+)(.*?)(\+\*\/)/m).map(&:join)
#=> ["/*+\n   # Testing Documentation #\n   ## Another Documentation Line ##\n   This is also picked up\n+*/", "/*+ # More documentation # +*/"]

答案 1 :(得分:0)

也许那会对你有所帮助。这适用于JS:

/(?:\/\*\+)([\w\W]*?)(?=\+\*\/)/igm