ruby在2个字符串之间打印选定的文本行

ric*_*ick 6 ruby regex

我试图在ruby中的两个字符串之间获取一组文本,我似乎无法获得正确的方法或使用正确的正则表达式.

文本:

<html>
<body>

<!-- begin posts --> 

<h1>all kinds of html<h1>
<p> blah blah </p>
<p> i've been working on this forever </p>

<!-- end posts --> 

</html>
</body>
Run Code Online (Sandbox Code Playgroud)

我只是想从得到的一切<!-- begin posts --><!-- end posts -->,包容性,并保存那个文本块中的文本文件.

我想出了如何在开头打印线:

File.open("index.html").each_line do |line|
body.each {|line| puts line if line =~ /<!-- begin/}

但不是后面的行和直到最后一个字符串.

我在这里有一个rubular http://rubular.com/r/0W9QDpMGkM,我无法找到任何东西.

提前谢谢大家.

mu *_*ort 8

不要一行一行地做,只是将整个东西啜饮成一个字符串并撕开它:

s    = File.read('index.html')
want = s.match(/<!-- begin posts -->(.*)<!-- end posts -->/m)[1]
Run Code Online (Sandbox Code Playgroud)

现在,你的标记之间的所有内容都在want.不要忘记m正则表达式上的修饰符.

当您修改输入时,您也可以删除杂散的前导和尾随空格:

want = s.match(/<!-- begin posts -->(.*)<!-- end posts -->/m)[1].strip
Run Code Online (Sandbox Code Playgroud)

正如都铎在下面所说,(.*?)如果您认为有多个<!-- end posts -->标记的可能性,您可能希望对该组使用非贪婪; 当他们真的要你的时候,不要因为有点偏执而受伤.

参考文献:

更新:match字符串上的方法返回MatchData对象.的数组访问运算符:

... mtch[0]等同于特殊变量$&,并返回整个匹配的字符串.mtch[1],mtch[2]等等返回匹配的反向引用的值(括号内的模式部分).

用于访问匹配的部分.正则表达式中只有一个组,因此[1]在没有周围的HTML注释分隔符的情况下获取该组的内容.