php preg match解析可能是Youtube URL的东西

时间:2013-08-21 18:40:18

标签: php regex preg-match

我的文字是:

u0026itag=22\u0026url=http%3A%2F%2Fr5---sn-q4f7dnel.c.youtube.com\u0026sig

我想解析 u0026url 我的PHP代码:

preg_match('/u0026itag=22\u0026url=(.*?)/', $part, $A);
echo $A[1];

但它不给我结果

2 个答案:

答案 0 :(得分:1)

首先提示:如果你enable errors, PHP tells you about what is going wrong。当我第一次逐字复制你的代码时,我收到了以下警告:

  

警告:preg_match():编译失败:PCRE不支持偏移量为14的

所以这已经暗示你在逐字输入的某些序列被解析为正则表达式,因此它需要转义或引用。我更喜欢在这里引用,即在开始时包含\ Q,在结尾处包含\ E(QuotE):

$result  = preg_match('/^\Qu0026itag=22\u0026url=\E(.*?)/', $subject, $matches);
                         ##                      ##

然后阻止查看错误并将$result变为1,这意味着它确实有效。但是你仍然没有在组1中看到任何匹配,或者更好地说你看到一个空的匹配:

  [0] => string(22) "u0026itag=22\u0026url="
  [1] => string(0) ""

那是因为你把重复与明星从贪婪变为懒惰。让我们拥抱它:

  /^\Qu0026itag=22\u0026url=\E(.*+)/
                                 # plus means posessive

  [1] => string(52) "http%3A%2F%2Fr5---sn-q4f7dnel.c.youtube.com\u0026sig"

好的,这看起来更好,它包含“URL”。

这让我想到了这一点:即使我为正则表达式解释了一些(希望这给出了一些指示),它实际上可能不是首先使用的正确工具。

你在这里看到的是一些确实包含URL编码的JSON字符串。

因此,我建议您首先使用json_decode解码JSON字符串,然后使用parse_url解析该URL,然后您需要做的就是获取url查询参数。那是parse_str

答案 1 :(得分:0)

您是否尝试过使用贪婪匹配http://regex101.com/r/lT1wK5?记得要逃避\ u,否则你会得到

  

编译失败:PCRE不支持\ L,\ l,\ N {name},\ U或\ u

示例:

$var = "u0026itag=22\u0026url=http%3A%2F%2Fr5---sn-q4f7dnel.c.youtube.com\u0026sig";

preg_match('/u0026itag=22\\\u0026url=(.*)/', $var, $A);
echo $A[1];