Regex粉丝们,嗨。在下面的代码中,有两个父标记(T1-4和T5-6)和一个子标记(T2-3)。
你怎么配T1-4?或者一般情况下,如何匹配父标记?
<?php
$subject = '
{{poo}} # T1
Hello
{{poo}} # T2
Nested 1
{{/poo}} # T3
{{/poo}} # T4
{{poo}} # T5
Bye
{{/poo}} # T6
';
$p = '!{{(\w+)}}(.*){{/\1}}!s'; // matches T1-6, too greedy
$p = '!{{(\w+)}}(.*?){{/\1}}!s'; // matches T1-3, not what I want
$p = '`(?xs) # xtended
{{(\w+)}}
.*?
(?R)? # currently working on this one...
{{/\1}}
`';
preg_replace_callback($p, function($match){
var_dump($match);
}, $subject);发布于 2014-05-22 09:16:29
这可能是你要找的东西:
$p = '`(?x)
{{(\w+)}}
# ( # you need probably this capture group later
(?>
[^{]++
|
{ (?!{)
|
{{ (?! /? \1 \b) # if needed you can add }} in the lookahead
|
(?R)
)*
# )
{{/\1}}
`';https://stackoverflow.com/questions/23799129
复制相似问题