我有以下输入:
string='GET........ref=mp4;GET........ref=flv;GET........ref=mp4;'
它有3段。我需要提取以mp4;
结尾的片段。
ie。
GET........ref=mp4
GET........ref=mp4
当前结果将匹配GET........ref=mp4
和GET........ref=flv;GET........ref=mp4;
。
My正则表达式:GET(.*?)mp4
我不需要包含flv
的长匹配,这个正则表达式不起作用:GET(.*?)(?!:flv)mp4
我不知道怎么解决,希望你能帮助我。
可以将分号分隔的列表展开,然后使用preg_grep
只获取以mp4
结尾的元素:
$string='GET........ref=mp4;GET........ref=flv;GET........ref=mp4;';
$res = explode(";", $string);
$res = preg_grep('/mp4$/i', $res);
print_r($res);
参见IDEONE demo
如果没有分号,则全部粘贴:
// NO SEMI_COLONS
$str='GET........ref=mp4GET........ref=flvGET........ref=mp4';
preg_match_all('/GETb(?:(?!GETb).)*mp4(?=$|GETb)/', $str, $res);
print_r($res);
查看另一个IDEONE演示
首先,您需要将字符串拆分为标记:
http://get........ref=mp4
http://get........ref=flv
http://get........ref=mp4
,然后应用正则表达式。如果你需要它以HTTP开始,以mp4结束,然后使用"^ HTTP .mp4$"^表示行开始,$表示行结束,.表示匹配任意字符0次或更多次。下面是使用sed拆分结果的示例,例如:
echo "http://get........ref=mp4;http://get........ref=flv;http://get........ref=mp4a;" | sed s/';'/\n/g | grep "^http.*mp4$"
编辑:如果';'不是真正的分隔符,用真正的分隔符替换它
如果您正在寻找一种更干净的方法,可以使用或不使用;
preg_match_all("/GET(?:(?!GET).)*=mp4/", $str, $res);
print_r($res);