想象一下,我正在尝试使用Perl正则表达式解析以下html:
<h4>test</h4> <p>num1</p> <p>num2</p> <p>num3</p>
<h4>test</h4> <p>num1</p> <p>num2</p> <p>num3</p> <p>num4</p>
使用以下正则表达式:
<h4>([\w\s]*)</h4>(?:<p>([\w\s]+)</p>)+
如何在Perl中编号编组? $ 1显然会包含<h4>
标记文字,但是当捕获组重复时,捕获的<p>
标记会被发送到$ 2 $ 3和$ 4?有没有一种很好的方法来捕获数组中的所有<p>
标签?这甚至是perl支持的东西吗?或者我被迫为<h4>
编写一个正则表达式,然后为<p>
编写另一个正则表达式?
(我知道我可以使用HTML::Tree
或类似的东西来解析html,但这只是我用来帮助描述问题的简单例子,我真的只对重复的方式感兴趣编号的捕获组在Perl中工作
答案 0 :(得分:3)
重复捕获组时,只有最后一个匹配的组将存储在匹配器中。
如果你想从重复组获得每个匹配,你可以使用带有回调函数的replaceAll或逐个遍历匹配。
大多数语言也有“全部匹配”,我不知道如何在perl中进行操作。这通常会将所有匹配项存储到数组中,但重复组仍仅作为最后匹配的组存储。