提取以" mp4"结尾的子串

时间:2015-09-30 10:56:56

标签: regex match preg-match-all

我有以下输入:

string='GET........ref=mp4;GET........ref=flv;GET........ref=mp4;'

它有3个部分。我需要提取以mp4;结尾的细分。

即。

GET........ref=mp4
GET........ref=mp4

当前结果将与GET........ref=mp4GET........ref=flv;GET........ref=mp4;匹配。

我的常规快递:GET(.*?)mp4

我不需要内部包含flv的长匹配,此正则表达式不起作用:GET(.*?)(?!:flv)mp4

我不知道如何解决,感谢任何帮助。

3 个答案:

答案 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}}

请参阅another IDEONE demo

答案 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);