求个正则,关于零宽断言

本意是希望得到由 /+// 打头的数据,即

/+// 打头,后面接任何数据,但后面不能连着 /+//

$string ='/+//4IsvMoKUhxgOl9AEU2hPkg=/+//9FW+E1jqvrhTXNYXk03DjQ/+//JwpOTAv4fVpEiH2rYjwV0w==';
$pattern = '/(\/\+\/\/.+?(?!\/\+\/\/))/';

if(preg_match_all($pattern, $string, $matches )) {
   print_r($matches[0]);
}
阅读 323
评论
    2 个回答

    php不懂。给个js的示例

     var str = '/+//4IsvMoKUhxgOl9AEU2hPkg=/+//9FW+E1jqvrhTXNYXk03DjQ/+//JwpOTAv4fVpEiH2rYjwV0w==';
     var reg = /(?<=(\/\+\/\/)).*?(?=\1|$)/g;
     str.match(reg);
     //"4IsvMoKUhxgOl9AEU2hPkg=", "9FW+E1jqvrhTXNYXk03DjQ", "JwpOTAv4fVpEiH2rYjwV0w=="]

    解释:

    • (?<=abc):以abc开头,但不匹配abc.所以 (?<=(\/\+\/\/)),即以/+//打头并分组(),这里的分组后面会用到
    • .*?:惰性匹配,emm就是说匹配到一个满足的就完成了步继续往后匹配
    • (?=abc):匹配以abc结尾,但是不匹配abc;
    • \1:分组引用,前面我们对/+//进行了一次分组,这里就不必再写一次转义的东西了,直接\1引用第一个分组即可。所以 (?=\1|$): 匹配以/+//结尾或直接结尾的.

    最后得到:/(?<=(\/\+\/\/)).*?(?=\1|$)/g (g修饰符用来全局匹配,以得到多个结果,如果只要一个就不加g修饰符);

    希望能帮到你,不足之处望指出。

      <?php
      $str ='/+//4IsvMoKUhxgOl9AEU2hPkg=/+//9FW+E1jqvrhTXNYXk03DjQ/+//JwpOTAv4fVpEiH2rYjwV0w==';
      preg_match_all ('%(?<=/\+//)[^/]+%', $str, $pat_array);
      print_r($pat_array[0]);
      ?>
        撰写回答

        登录后参与交流、获取后续更新提醒