求个正则,关于零宽断言

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

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

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

if(preg_match_all($pattern, $string, $matches )) {
   print_r($matches[0]);
}
阅读 2k
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]);
?>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题