正则表达式反向引用非捕获组?

时间:2014-08-10 03:12:46

标签: php regex

对照这样的字符串:

<h3>title</h3>
<h4>title</h4>

如何相应地匹配标签并获取文本?

这样可行,但它不必要地获取标记名称:

'@<(h[34])>(.+)</\1>@sU'

然而,这似乎不起作用,因为我不想获取标签名称,只是想反向引用它:

'@<(?:h[34])>(.+)</\1>@sU'

我正在使用PHP preg_match()。为什么第二种方法不起作用?是否可以返回引用非捕获组?

1 个答案:

答案 0 :(得分:2)

Capturing groups稍后可以在正则表达式中用作对该捕获组中匹配内容的反向引用。通过将?:置于您的内部,指定不要捕获该组,而是指定组表达式。

您可以使用分支重置功能(?| ... | ... ),使您的表达式与非对应标记不匹配,并且备选方案中的两个捕获组都被视为一个捕获组。

~(?|<h3>(.+?)</h3>|<h4>(.+?)</h4>)~s

Live Demo