Регулярное выражение (preg_match_all)

У меня есть частный веб-сайт, где я делюсь видео (и некоторыми другими вещами). Я добился того, что с помощью preg_match_all() он автоматически находит ссылку и вставляет видео с HTML-кодом на мой сайт.

Вот пример:

    <?php
$matchwith = "http://videosite.com/id1 http://videosite.com/id2 http://videosite.com/id3";
preg_match_all('/videosite\.com\/(\w+)/i', $matchwith, $matches);  
foreach($matches[1] as $value)
{  
  print '<a href="http://videosite.com/'.$value.'">Hyperlink</a>';           
}      
    ?>

Это работает. Я знаю, что это можно было бы сделать проще, но так должно быть.

Но я не знаю, как это с двухсерийным фильмом. Вот пример:

    $matchWith = "http://videosite.com/id1_movie1 http://videosite.com/id2_movie1"
               "http://videosite.com/id3_movie2 http://videosite.com/id4_movie2";

Все после http://videosite.com/(...) уникально.

Я хочу, чтобы если вы написали часть 1 и часть 2 (или что-то еще) перед ссылкой, она автоматически определила ее как часть 1 и часть 2 этого видео.

$matchwith может содержать разные фильмы.


person Helena    schedule 22.11.2011    source источник
comment
Я так понимаю - вы хотите группировать фильмы по частям?   -  person Andron    schedule 22.11.2011
comment
И id будет одинаковым для всех частей?   -  person Andron    schedule 22.11.2011
comment
Нет, идентификатор будет разным для каждой части. Например, как на YouTube: у каждого видео есть свой идентификатор.   -  person Helena    schedule 22.11.2011
comment
Что-то должно быть похоже, чтобы идентифицировать части одного и того же фильма. Я думал, что можно будет сделать анализом id, а вы говорите, что они будут разные у всех частей...   -  person Andron    schedule 22.11.2011
comment
Если я напишу что-то перед ссылкой, например, Часть 1 = Ссылка, Часть = Ссылка. Как это могло работать?   -  person Helena    schedule 22.11.2011
comment
Можно ли разделить группы переносом строки? Таким образом, каждая ссылка будет в отдельной строке.   -  person Andron    schedule 22.11.2011
comment
Вы имеете в виду, что каждая группа будет в своей строке? Да, это может быть возможно. Спасибо!! :)   -  person Helena    schedule 22.11.2011


Ответы (2)


Поэтому я считаю, что это то, что вам нужно:

<?php
$matchWith = "Movie 1 http://videosite.com/id1" . PHP_EOL .
         "Movie 1 http://videosite.com/id2" . PHP_EOL .
         "Movie 2 http://videosite.com/id3";

$arrLinks = array();
preg_match_all('%(.*)\shttp://videosite\.com/(\w+)\r{0,1}%', $matchWith, $result, PREG_SET_ORDER);
for ($matchi = 0; $matchi < count($result); $matchi++) {
    $arrLinks[$result[$matchi][1]][] = $result[$matchi][2];
}

foreach ($arrLinks as $movieName => $arrMovieIds) {
    print '<div>' . $movieName . '</div>';
    foreach ($arrMovieIds as $movieId) {
        print '<a href="http://videosite.com/'.$movieId.'">Hyperlink</a><br/>';
    }
}
?>
person Andron    schedule 22.11.2011
comment
Идеальный. Спасибо за помощь! :) - person Helena; 23.11.2011
comment
Добро пожаловать :) Насколько я понимаю, stackoverflow — это место, где помощь будет оказана в случае необходимости. - person Andron; 23.11.2011

person    schedule
comment
Мне пришлось исправить ваше регулярное выражение. Я предполагаю, что он использовал неверный URL-адрес. Возможно нет? - person Moz Morris; 22.11.2011
comment
Вы правы, но я все еще жду ответа. Мне просто нужно это для двух частей фильмов. Спасибо. - person Helena; 22.11.2011
comment
@Helena, извините, я обновил свой ответ :). Вывод, который я получаю: ‹a href=videosite.com/id1-1›Hyperlink‹/ a› ‹a href=videosite.com/id1-2›Гиперссылка‹/ а - person Moz Morris; 22.11.2011
comment
@Moz Morris - идентификаторы будут уникальными для каждой части :) т.е. могут быть xxx и yyy - person Andron; 22.11.2011
comment
Да. Идентификаторы будут уникальными для каждой части. Можно как-то так сделать? Фильм 1: Часть 1 = Ссылка 1 Часть 2 = Связь 2 Фильм 2: Часть 1 = Связь 1 Часть 2 = Связь 2? Большое спасибо. - person Helena; 22.11.2011
comment
Также важно: $matchwith может содержать разные фильмы. Извините забыл упомянуть. Но я думаю, что это действительно важно - person Helena; 22.11.2011