我想编写一个正则表达式,该正则表达式与以可选空白<
,一堆东西然后是>
开头的行匹配。例如,这整件事应该匹配3次:
<div
data-test="foo"
class="first bar baz"
>
<h2>test</h2>
</div>
我可以正常工作,它使用以下正则表达式:(^\s*<.*?>\s*$)+
。进行操作here进行检查。
但是,它当前可以通过生成三个匹配项来工作。有没有办法使匹配的相邻行作为一个匹配返回?
在上面的示例中,由于所有内容都匹配,因此我希望将其作为单个匹配项返回。会发生吗?
编辑:要澄清-正则表达式应匹配:
<foo>
也
<h1>test</h1>
甚至
< b-8253j'\sf>
但忽略
foo<bar>
因为它没有有效地以<
开头。
如果在同一行上没有找到>
,它将继续匹配所有行,直到达到>
:
<div
matches
here>but this line is also matched</div>
正如我所说,我的正则表达式就是这样做的。但是,它会与此匹配:
<div>
<foo></foo>
<baaaar>
三个不同的时间。由于所有内容都匹配,因此我希望将这些匹配项合并并作为单个匹配项返回。
但是,例如,如果中间行无效,则应返回2个匹配项:
<div> // match 1
no<foo></foo> // doesn't start with `<`, ignored
<baaaar> // match 2
答案 0 :(得分:0)
您指定了一个惰性匹配项(匹配尽可能少的子字符串)。删除问号,它会尝试一个贪婪的(匹配最大可能的子字符串):
(^\s*<.*>\s*$)+
但是通常使用正则表达式处理HTML会使您走上一条痛苦的路。