我有以下输入:
string='GET........ref=mp4;GET........ref=flv;GET........ref=mp4;'
它有3个部分。我需要提取以mp4;
结尾的细分。
即。
GET........ref=mp4
GET........ref=mp4
当前结果将与GET........ref=mp4
和GET........ref=flv;GET........ref=mp4;
匹配。
我的常规快递:GET(.*?)mp4
我不需要内部包含flv
的长匹配,此正则表达式不起作用:GET(.*?)(?!:flv)mp4
我不知道如何解决,感谢任何帮助。
答案 0 :(得分:1)
您可以展开以分号分隔的列表,然后使用mp4
仅获取以$string='GET........ref=mp4;GET........ref=flv;GET........ref=mp4;';
$res = explode(";", $string);
$res = preg_grep('/mp4$/i', $res);
print_r($res);
结尾的元素:
// NO SEMI_COLONS
$str='GET........ref=mp4GET........ref=flvGET........ref=mp4';
preg_match_all('/GET\b(?:(?!GET\b).)*mp4(?=$|GET\b)/', $str, $res);
print_r($res);
请参阅IDEONE demo
如果没有分号,则全部粘在一起:
{{1}}
答案 1 :(得分:0)
首先,您需要将字符串拆分为标记:
http://get........ref=mp4
http://get........ref=flv
http://get........ref=mp4
然后应用你的正则表达式。如果你需要它从http开始并以mp4结束然后使用“^ http。 mp4 $” ^表示行的开头,$表示行的结尾,而<。em>表示匹配任何字符0次或更多次。例如,使用sed分割结果:
echo "http://get........ref=mp4;http://get........ref=flv;http://get........ref=mp4a;" | sed s/';'/\\n/g | grep "^http.*mp4$"
编辑:如果';'不是真正的分隔符,用真正的分隔符替换它。
答案 2 :(得分:0)
如果您正在寻找一种可以使用或不使用;
preg_match_all("/GET(?:(?!GET).)*=mp4/", $str, $res);
print_r($res);