PHP > preg_match("@/m(/[^/]+)+/t/?@", "/m/part/other-part/t", $m);
PHP > var_dump($m);
array(2) {
[0]=>
string(20) "/m/part/other-part/t"
[1]=>
string(11) "/other-part"
}
PHP > preg_match_all("@/m(/[^/]+)+/t/?@", "/m/part/other-part/t", $m);
PHP > var_dump($m);
array(2) {
[0]=>
array(1) {
[0]=>
string(20) "/m/part/other-part/t"
}
[1]=>
array(1) {
[0]=>
string(11) "/other-part"
}
}
通过上述示例,我希望捕获匹配/ part和/ other-part,遗憾的是regex / m(/ [^ /])/ t /?不像我期望的那样捕捉到两者.
此捕获不应仅限于匹配此样本,它应捕获捕获组的未定义重复次数;例如/米/部件/等部位/和另一个/多/吨
更新:
鉴于这是预期的行为,我的问题就是如何实现我的匹配?
解决方法:
试试这个:
preg_match_all("@(?:/m)?/([^/]+)(?:/t)?@", "/m/part/other-part/another-part/t", $m);
var_dump($m);
它给:
array(2) {
[0]=>
array(3) {
[0]=>
string(7) "/m/part"
[1]=>
string(11) "/other-part"
[2]=>
string(15) "/another-part/t"
}
[1]=>
array(3) {
[0]=>
string(4) "part"
[1]=>
string(10) "other-part"
[2]=>
string(12) "another-part"
}
}
//编辑