2012-01-23 2 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.

Привет, Фил ,

EDIT: не понимал, что мне нужно использовать теги кода для экранированных косечек, чтобы они отображались!

+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

Того @sanusart за помощь – Alex

Смежные вопросы