我遇到了正则表达式的问题(是的,有一天,我必须坐下来阅读它)。 这是我正在使用的代码;
$string = "[if-protectDelete-{0}-][data]name[/data] can be deleted[/elseif][elseif-{1}-][data]name[/data] can't be deleted[/elseif][elseif-{2}-]No data[/elseif][/endif]";
if (preg_match_all("#\[elseif-\{(.+)\}-\](.+?)\[/elseif\]#", $string, $matches)) {
dumper($matches[0]);
}
$ matches [0]输出是;
array(1) {
[0]=>
string(75) "[elseif-{1}-]PHP REGEX can't be deleted[/elseif][elseif-{2}-]No data[/elseif]"
}
我可以为if获得正确的部分,但是如果......我猜这是完全不同的情况。 不应该这样吗? ;
array {
[0] => "[elseif-{1}-]PHP REGEX can't be deleted[/elseif]",
[1] => "[elseif-{2}-]No data[/elseif]"
}
如果有人能解决我的问题,我会很高兴。
答案 0 :(得分:1)
看起来你仍然有一个贪婪的+
。这可能会解决它:
#\[elseif-\{([0-9]+)\}-\](.+?)\[/elseif\]#
请注意替换[0-9]+
的{{1}}。让我知道这是怎么回事。
假设你可能在花括号内有任何东西,除了其他卷曲的花边,这会更好:
.+
或者,就像你提到的那样:#\[elseif-\{([^}]+)\}-\](.+?)\[/elseif\]#
答案 1 :(得分:1)
只需添加?
your : \[elseif-\{(.+)\}-\](.+?)\[/elseif\]
right: \[elseif-\{(.+?)\}-\](.+?)\[/elseif\]
答案 2 :(得分:1)
我不知道dumper
做了什么,但数组$matches
包含$matches[0]
中的完整匹配以及$matches[1]
$matches[2]
中捕获的组。
所以你应该:print_r($matches);
来获得你的比赛组。