使用正则表达式,我需要提取标签的多行内容,该内容具有特定的id值。我怎么能这样做?
这就是我目前所拥有的:
eval
这个问题就是这个样本:
<div(.|\n)*?id="${value}"(.|\n)*?>(.|\n)*?<\/div>
如果我想使用此正则表达式替换<div id="1">test</div><div id="2">test</div>
(使用id="2"
),则整个字符串将匹配。这是因为从标签打开到关闭,我匹配所有内容,直到找到id,这是错误的。
我该怎么做?
答案 0 :(得分:1)
一种相当简单的方法是使用
原始:<div(?=\s)[^>]*?\sid="2"[^>]*?>([\S\s]*?)</div>
分隔:/<div(?=\s)[^>]*?\sid="2"[^>]*?>([\S\s]*?)<\/div>/
使用变量代替2
。
内容将在第1组中。
答案 1 :(得分:0)
将(.|\n)
更改为[^>]
,以便它不会与结束标记的>
匹配。然后它不能匹配不同的div。
<div\b[^>]*\bid="${value}"[^>]*>.*?<\/div>
此外,不要使用(.|\n)*
匹配多行,而是使用正则表达式的s
修饰符。这使.
匹配任何字符,包括换行符。
但是,使用正则表达式解析HTML并不是很强大。你应该使用DOM解析器。