2012-01-23 55 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