PHP-php正则递归匹配

PHP-php正则递归匹配

瑾兮 发布于 2017-06-24 字数 471 浏览 1169 回复 2

$string = "some text (aaa(b(c1)(c2)d)e)(test) more text";
写一个递归正则匹配,输出结果数组为

array(3) {
[0]=>
array(2) {
[0]=>
string(18) "(aaa(b(c1)(c2)d)e)"
[1]=>
string(6) "(test)"
}
[1]=>
array(2) {
[0]=>
string(16) "aaa(b(c1)(c2)d)e"
[1]=>
string(4) "test"
}
[2]=>
array(2) {
[0]=>
string(0) ""
[1]=>
string(0) ""
}
}

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

清晨说ぺ晚安 2017-11-03 2 楼

这个问题有些奇怪,需求比较特别,写个js的解析方法,权当抛砖引玉:

var s = "some text (aaa(b(c1)(c2)d)e)(test) more text";
var count = 0, begin = 0, finds = [];
s.replace(/(|)/g, function($0, $1){
if($0 == "(") {
if(count <= 0) {
count = 1;
begin = $1;
}else {
++count;
}
}else {
--count;
if(count == 0) {
finds.push(s.substring(begin + 1, $1));
}
}
});
alert(finds);

浮生未歇 2017-09-25 1 楼

如果你要匹配出这个
(aaa(b(c1)(c2)d)e)
(test)

 <?php
$str="some text (aaa(b(c1)(c2)d)e)(test) more text";
preg_match_all("/(([^()]|(?R))*)/",$str,$arr);
print_r($arr);
?>