我试图在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>
我只是想从得到的一切<!-- 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,我无法找到任何东西.
提前谢谢大家.
不要一行一行地做,只是将整个东西啜饮成一个字符串并撕开它:
s    = File.read('index.html')
want = s.match(/<!-- begin posts -->(.*)<!-- end posts -->/m)[1]
现在,你的标记之间的所有内容都在want.不要忘记m正则表达式上的修饰符.
当您修改输入时,您也可以删除杂散的前导和尾随空格:
want = s.match(/<!-- begin posts -->(.*)<!-- end posts -->/m)[1].strip
正如都铎在下面所说,(.*?)如果您认为有多个<!-- end posts -->标记的可能性,您可能希望对该组使用非贪婪; 当他们真的要你的时候,不要因为有点偏执而受伤.
参考文献:
File.read(实际上IO.read)String#matchString#strip更新:match字符串上的方法返回MatchData对象.的数组访问运算符:
...
mtch[0]等同于特殊变量$&,并返回整个匹配的字符串.mtch[1],mtch[2]等等返回匹配的反向引用的值(括号内的模式部分).
用于访问匹配的部分.正则表达式中只有一个组,因此[1]在没有周围的HTML注释分隔符的情况下获取该组的内容.
| 归档时间: | 
 | 
| 查看次数: | 4430 次 | 
| 最近记录: |