2012-01-23 28 views
1

好了,所以可以说我需要一个部分链接:http://www.dailymotion.com/video/xnstwx_bmw-eco-pro-race_auto无法获得的preg_match返回所需的数据

我需要得到

[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); ,我想你已经知道这是错误的。

我一直逃避正则表达式无缘无故,现在我试图学习使用正则表达式作弊表,但现在我有点卡住:)。

回答

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

和尖端:它总是一个好主意,不要使用URL打交道时使用/为正则表达式的分隔符,所以你不会有逃避你的模式所有的斜线。

+0

感谢您的解决方案 – Alex

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" 
} 

有做到这一点许多潜在的方式,但是这仅仅是浮现在脑海的第一个例子。

+0

谢谢你的解决方案,并为解释 – Alex

1

使用以下命令来匹配$ match [1]和$ match [2]中的匹配项。

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

不需要AZ与I改性剂,所述阵列中的第一个元素总是完全匹配的表达式,这就是为什么预期的结果是在位置1和2

问候, 菲尔,

编辑:没有意识到我不得不使用代码标签的逃逸斜杠来显示!

+0

菲尔感谢您的帮助 – Alex

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) 
+0

TNX @sanusart寻求帮助 – Alex