对照这样的字符串:
<h3>title</h3>
<h4>title</h4>
如何相应地匹配标签并获取文本?
这样可行,但它不必要地获取标记名称:
'@<(h[34])>(.+)</\1>@sU'
然而,这似乎不起作用,因为我不想获取标签名称,只是想反向引用它:
'@<(?:h[34])>(.+)</\1>@sU'
我正在使用PHP preg_match()。为什么第二种方法不起作用?是否可以返回引用非捕获组?
答案 0 :(得分:2)
Capturing groups稍后可以在正则表达式中用作对该捕获组中匹配内容的反向引用。通过将?:
置于您的内部,指定不要捕获该组,而是指定组表达式。
您可以使用分支重置功能(?| ... | ... )
,使您的表达式与非对应标记不匹配,并且备选方案中的两个捕获组都被视为一个捕获组。
~(?|<h3>(.+?)</h3>|<h4>(.+?)</h4>)~s