想象一下,我有以下字符串:
$str = "[block]teststring [block]teststring123 [/block][/block]";
我想获取[block]元素(teststring
,teststring123
)中的值。我知道我可以做某事。像:
<?php
$str = "[block]teststring [block]teststring123 [/block][/block]";
$regex = '/\[block\]([^\[\]]+)/';
preg_match_all($regex, $str, $matches);
print_r($matches);
// outputs array(array("[block]teststring ", "[block]teststring123 "),
// array("teststring ", "teststring123 "));
?>
然而,随着我对正则表达式的学习越来越多,我想到了使用递归:
$regex = '/\[block\]([^\[\]]+)(?R)?/';
只要整个字符串匹配,这就可以工作,但是我无法访问子匹配([block]teststring
,[block]teststring123
)。如何通过PHP中的正则表达式来完成?
答案 0 :(得分:1)
您可以使用此递归正则表达式:
\[block\]([^][]+)(?1)
(?1)
递归第一个子模式。
<强>代码:强>
$re = '~\[block\]([^][]+)(?1)~';
$str = "[block]teststring [block]teststring123 [/block][/block]";
preg_match_all($re, $str, $matches);
print_r($matches);