我想从字符串<h1>test</h1><div>toast</div>
中提取“toast”。什么正则表达式可以隔离这样的字符串?
编辑:感谢更正格式的用户。
更多信息:div标签总会只有一个实例,里面的信息可能会改变,但同一个字符串中永远不会有另一个div标签(字符串大于给定的样本)
谢谢!
答案 0 :(得分:5)
您可以使用Nokogiri
。
require 'nokogiri'
doc = Nokogiri::HTML::Document.parse("<div> test </div> <div> toast </div>")
doc.css('div').map(&:text)
# => [" test ", " toast "]
require 'nokogiri'
doc = Nokogiri::HTML::Document.parse("<h1>test</h1><div>toast</div>")
doc.at_css('div').text
# => "toast"
答案 1 :(得分:1)
我们需要更多信息。如果字符串正好是"<h1>test</h1><div>toast</div>"
,那么就像
regex = /<h1>test<\/h1><div>([^<]*)<\/div>/
found = "<h1>test</h1><div>toast</div>".match(regex)[1]
# => "toast"
会奏效。我最好的猜测就是你期待
<h1>*</h1><div>*</div>
然后使用它:
regex = /<h1>[^<]*<\/h1><div>([^<]*)<\/div>/
found = "<h1>any string can go here</h1><div>toast</div>".match(regex)[1]
# => "toast"
请注意,如果任一标记中存在任何嵌套元素,则会中断此操作。更强大的解决方案是使用Nokogiri。和老板谈谈。
答案 2 :(得分:1)
这通常不是通常用正则表达式完成的......并且有充分的理由,但是如果你必须并且因为你说过它将永远不会超过一个div ...这应该适合你:
(?<=<div>).*(?=</div>)