提取以"mp4"结尾的子字符串



我有以下输入:

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

它有3段。我需要提取以mp4;结尾的片段。

ie。

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

当前结果将匹配GET........ref=mp4GET........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);

最新更新