php – 正则表达式量化捕获

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"
  }
}

//编辑

IMO做你想做的最好的方法是使用来自@stema的preg_match()并使用/爆炸结果得到你想要的部分列表.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...