无法获取preg_match来返回所需的数据

时间:2012-01-23 21:33:27

标签: php regex preg-match

好的,我可以说我需要参与此链接:http://www.dailymotion.com/video/xnstwx_bmw-eco-pro-race_auto

我需要

[0] => xnstwx

[1] => bmw-eco-pro-race_auto

我正在尝试:preg_match('/video\/([A-Za-z0-9]+)_/i', $video['url'], $match);

我得到了:

[0] => video/xnstwx_

[1] => xnstwx

比我尝试的那样:preg_match('/video\/([A-Za-z0-9]+)_/([A-Za-z0-9-_]+)', $video['url'], $match); 我想你已经知道这是错的。

我总是无缘无故地逃避正则表达式,现在我正在尝试使用正则表达式备忘单,但现在我有点卡住了。)。

4 个答案:

答案 0 :(得分:2)

有点晚了,但是:

<?php
$u = 'http://www.dailymotion.com/video/xnstwx_bmw-eco-pro-race_auto';
preg_match('/([A-Za-z0-9]+)_([A-Za-z0-9].+)/', $u,$m);
print_r($m);
?>

给出:

Array ( [0] => xnstwx_bmw-eco-pro-race_auto [1] => xnstwx [2] => bmw-eco-pro-race_auto ) 

答案 1 :(得分:1)

(.+)之后添加_。这会捕获()之后按_分组的任何字符中的一个或多个。

preg_match('/video\/([A-Za-z0-9]+)_(.+)/i', $video['url'], $match);

var_dump($match);
array(3) {
  [0]=>
  string(34) "video/xnstwx_bmw-eco-pro-race_auto"
  [1]=>
  string(6) "xnstwx"
  [2]=>
  string(21) "bmw-eco-pro-race_auto"
}

有很多可能的方法可以做到这一点,但这只是我想到的第一个例子。

答案 2 :(得分:1)

preg_match('@video/([^_]+)_(.+)@', $video['url'], $match);

还有一个提示:在处理网址时不要使用/作为正则表达式分隔符总是一个好主意,因此您不必转义模式中的所有斜杠。

答案 3 :(得分:1)

使用以下内容在$ match [1]和$ match [2]中获得匹配。

preg_match("/.*\/video\/([a-z0-9]+)_(.*)$/i", $video['url'], $match);

不需要带有i修饰符的A-Z,数组中的第一个元素始终是完全匹配的表达式,这就是预期结果位于第1和第2位的原因。

此致 菲尔,

编辑:没意识到我必须使用代码标签来显示转义斜杠!