php preg_match -> сохранить соответствующее значение в переменной? - PullRequest
4 голосов
/ 14 февраля 2011

my $content переменная хранит ссылку на видео YouTube.

$youtubeurl = "/(\[TRACK=)((http|https)(\:\/\/)(www|it|co\.uk|ie|br|pl|jp|fr|es|nl|de)(\.youtube\.)(com|it|co\.uk|ie|br|pl|jp|fr|es|nl|de)([a-zA-Z0-9\-\.\/\?_=&;]*))(\])/si"; 


$video = preg_match($youtubeurl, $content , $found);
print_r($video); // 1

Как я могу сохранить значение совпадающей строки в переменной? Теперь, если я print_r($video), я просто получаю 1, что означает, что он найден. Однако мне нужно держать найденную строку в переменной. Как я могу это сделать?

Спасибо

Ответы [ 2 ]

4 голосов
/ 14 февраля 2011

Вы должны найти его в $found[2]

Содержит все захваченные совпадения, то есть все шаблоны, которые вы получили в скобках.

  • $ найдено [0] = полное совпадение
  • $ найдено [1] = 1-е выражение [TRACK =
  • $ found [2] = весь URL, в котором есть несколько подгрупп - они будут образовывать следующие захваченные совпадения:
  • $ найдено [3] = http или https
  • $ found [4] = разделитель: //
  • $ найдено [5] = поддомен
  • $ найдено [5] = .youtube.
  • $ найдено [6] = домен верхнего уровня
  • $ найдено [7] = путь
  • $ найдено [8] = закрытие]

Очевидно, вы используете скобки довольно расточительно, так как вы собираете данные, которые вы не собираетесь использовать. Вы можете использовать (?: ) как способ группировки рисунка без захвата, например, (?:http|https) соответствует http или https, но не захватывает их.

1 голос
/ 14 февраля 2011

use preg_filter - если вы хотите использовать его с несколькими ссылками (будет возвращаться только правильно).

или используйте preg_replace, чтобы взять то, что вам нужно от $content.

...