我有regex,它可以搜索html<h>
族标记,但如果<h>
中有任何其他标记,则不起作用。请参阅以下示例。
<h([d]).*>s*[d]*s?[.]?s?([^<]+)</h([d])>
它工作
<h2 style="margin-top:1em;">What is Python?</h2>
它不起作用
<h2 style="margin-top:1em;">Python Jobs<span class="blink">New!</span></h2>
如何将此Python Jobs<span class="blink">New!</span>
捕获为第二组?需要3个捕获组——h2的2
、作为第二组的Python Jobs<span class="blink">New!</span>
和关闭h2的2
。
([^<]+)
表示在</h2>
之前匹配除<
之外的任何的序列。由于嵌套标签包含<
字符,因此这与它们不匹配。
使用.+?
来匹配标记的内容。?
使其不贪婪,因此当它到达第一个</h#>
时将停止。
您也可以在匹配的</h#>
部分使用反向引用,因此结束标记将强制与开始标记匹配。
<h(d).*?>s*d*s?.?s?(.+?)</h(1)>
顺便说一句,没有必要把d
放在[]
里面。