Не удается получить preg_match для возврата необходимых данных - PullRequest
1 голос
/ 24 января 2012

Хорошо, допустим, я должен принять участие по этой ссылке: 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 ]

2 голосов
/ 24 января 2012

Немного поздно, но:

<?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 голос
/ 24 января 2012
preg_match('@video/([^_]+)_(.+)@', $video['url'], $match);

И совет: всегда полезно не использовать / в качестве разделителя регулярных выражений при работе с URL-адресами, поэтому вам не придется избегать всех косых черт в вашем шаблоне.

1 голос
/ 24 января 2012

Используйте следующее, чтобы получить совпадения в $ match [1] и $ match [2].

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

нет необходимости в A-Z с модификатором i, первый элемент в массиве всегда является полностью совпадающим выражением, поэтому ожидаемые результаты находятся в позициях 1 и 2.

С уважением, Фил,

РЕДАКТИРОВАТЬ: не понял, что я должен был использовать теги кода для экранированных слешей, чтобы показать!

1 голос
/ 24 января 2012

Добавьте (.+) после _.Это ловушка одного или нескольких любых символов, сгруппированных по () после _.

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

Есть много потенциальных способов сделать это, но это только первый пример, который пришел на ум.

...