$str = <<<EOT
aaaa
<div>xxx</div>
<div id='my'>
<div>aaa</div>sssss
<div>bbbb</div>xee
</div>
aaa
<div>111s</div>sss
EOT;$reg = "/<div id='my'>[\s\S]*?(((?'open'<div[^>]*>)[\s\S]*?)+((?'-open'<\/div>)[\s\S]*?)+)*(?(open)(?!))<\/div>/";
preg_match($reg,$str,$rtn);
var_dump($rtn);用RegEx TestBed 测试可以的,但php却不行,
提示
Warning: preg_match(): Compilation failed: syntax error in subpattern name (missing terminator) at offset 56 in E:\website\test\regular.php on line 23
NULL
是什么原因啊??然道php不支持平衡组, 请教
aaaa
<div>xxx</div>
<div id='my'>
<div>aaa</div>sssss
<div>bbbb</div>xee
</div>
aaa
<div>111s</div>sss
EOT;$reg = "/<div id='my'>[\s\S]*?(((?'open'<div[^>]*>)[\s\S]*?)+((?'-open'<\/div>)[\s\S]*?)+)*(?(open)(?!))<\/div>/";
preg_match($reg,$str,$rtn);
var_dump($rtn);用RegEx TestBed 测试可以的,但php却不行,
提示
Warning: preg_match(): Compilation failed: syntax error in subpattern name (missing terminator) at offset 56 in E:\website\test\regular.php on line 23
NULL
是什么原因啊??然道php不支持平衡组, 请教
aaaa
<div>xxx</div>
<div id='my'>
<div>aaa</div>sssss
<div>bbbb</div>xee
</div>
aaa
<div>111s</div>sss
EOT;
$reg = "/<div id='my'>[\s\S]*?(((?'open'<div[^>]*>)[\s\S]*?)+((?'_open'<\/div>)[\s\S]*?)+)*(?(open)(?!))<\/div>/s";
preg_match_all($reg,$str,$rtn);
print_r($rtn);Array
(
[0] => Array
(
[0] => <div id='my'>
<div>aaa</div>
) [1] => Array
(
[0] =>
) [2] => Array
(
[0] =>
) [open] => Array
(
[0] =>
) [3] => Array
(
[0] =>
) [4] => Array
(
[0] =>
) [_open] => Array
(
[0] =>
) [5] => Array
(
[0] =>
))
<div>aaa</div>sssss
<div>bbbb</div>xee
因为报错,所以将 -open 改成了 _open这样是否好点$s =<<< TXT
aaaa
<div>xxx</div>
<div id='my'>
<div>aaa</div>sssss
<div>bbbb</div>xee
</div>
aaa
<div>111s</div>sss
TXT;
$p = "/<([a-z]+)[^>]*>([^<>]|(?R))*<\/\\1>/is";preg_match_all($p,$s,$m);print_r($m[0]);Array
(
[0] => <div>xxx</div>
[1] => <div id='my'>
<div>aaa</div>sssss
<div>bbbb</div>xee
</div>
[2] => <div>111s</div>
)再幻化一下?
$str = <<<EOT
aaaa
<div>xxx</div>
<div id='my'>
<div>aaa</div>sssss
<div>bbbb</div>xee
</div>
aaa
<div>111s</div>sss
EOT;
$reg = "/<div id='my'>[\s\S]*?<\/div>/s";
preg_match_all($reg,$str,$rtn);
print_r($rtn);