0

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

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

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

if(preg_match_all($pattern, $string, $matches )) {
   print_r($matches[0]);
}
3 个回答
1

已采纳

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修饰符);

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

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

按照上面采纳的答案,我寻思着,你这用 explode ,再 array_filter 效果不一样的,即使要以指定方式打头而已,只是substr 一下不也一样,为啥非要去死磕正则这种费力不讨好的方式。

撰写答案

推广链接