我试图在 ruby 中的两个字符串之间获取一组文本,但我似乎无法获得正确的方法或使用正确的正则表达式。
text:
<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 -->
to <!-- end posts -->
,包含在内,并将该文本块保存在文本文件中。
我想出了如何在开头打印该行:
File.open("index.html").each_line do |line|
body.each {|line| puts line if line =~ /<!-- begin/}
但不是从 up 到最后一个字符串之后的行。
我这里有红宝石http://rubular.com/r/0W9QDpMGkM 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 http://ruby-doc.org/core/classes/IO.html#M000883(实际上
IO.read
)
- String#match http://ruby-doc.org/core/classes/String.html#M001136
- String#strip http://ruby-doc.org/core/classes/String.html#M001189
UPDATE: the match http://ruby-doc.org/core/classes/String.html#M001136字符串上的方法返回一个匹配数据 http://ruby-doc.org/core/classes/MatchData.html目的。这数组访问运算符 http://ruby-doc.org/core/classes/MatchData.html#M000407:
... mtch[0]
相当于特殊变量$&
,并返回整个匹配的字符串。mtch[1]
, mtch[2]
,依此类推,返回匹配的反向引用的值(括号之间的模式部分)。
用于访问匹配的部件。正则表达式中只有一组,所以[1]
获取该组的内容,不带周围的 HTML 注释分隔符。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)