在Perl中重复编号的捕获组
想象一下,我试图用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>([ws]*)</h4>(?:<p>([ws]+)</p>)+
编号组如何在Perl中构造? $ 1显然会包含<h4>
标记文本,但是当捕获组重复时,捕获的<p>
标记会发送到$ 2 $ 3和$ 4吗? 有没有一种很好的方法来捕获数组中的所有<p>
标签? 这甚至是Perl支持的东西吗? 或者我不得不为<h4>
写一个正则表达式,然后再为<p>
写另一个正则表达式?
(我知道我可以使用HTML::Tree
或类似的东西来解析html,但这只是一个简单的例子,我用它来帮助描述这个问题,我真的只关心重复编号的捕获组是如何工作的在Perl中)
重复捕获组时,只有最后一个匹配组将被存储在匹配器中。
如果要从重复组中获取每个匹配,可以使用具有回调函数的replaceAll或逐个遍历所有匹配。
大多数语言也有一个“匹配所有”,我不知道如何在Perl中做。 这通常会将所有匹配项存储到数组中,但是重复组仍然只存储为最后一个匹配的组。
链接地址: http://www.djcxy.com/p/74813.html