вытягивание ссылок определенных доменов

Тема в разделе "Регулярные выражения", создана пользователем Festem, 19 дек 2015.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. Festem

    Festem Постоялец

    Регистр.:
    4 сен 2014
    Сообщения:
    97
    Симпатии:
    26
    Пробую сделать регулярку, которая вытягивала бы ссылки определенных доменов , причем из разных конфигураций
    Код:
    <a href="_сылка_">...</a>
    [url]_сылка_[/url]
    [url=_сылка_]...[/URL]
    Число доменов может постоянно меняться, поэтому регулярка должна быть удобной к автоматическому изменению доменов. Сделал вот такую:

    PHP:
    $string "околоссылочный текст
      [url]http://same.com/index/index/[/url]
            <a href=\"http://site.ru/same_page.php\">wetrwetwert</a> [url=https://156.168.36.192/same_page.php]qqqqqqqqq[/url]
             [URL]http://www.156.168.36.192/same_page.php#qwe[/URL]"
    ;
    preg_match_all('#(http|https)://([^\s]*)(156.168.36.192|site.ru)([^\s]*)#'$string$matches);

    var_dump($matches);
    Все бы ничего, но она захватывает лишние символы

    HTML:
    array(3) {
        [0]=>
        string(49) "http://site.ru/same_page.php">wetrwetwert</a>"
        [1]=>
        string(54) "https://156.168.36.192/same_page.php]qqqqqqqqq[/url]"
        [2]=>
        string(51) "http://www.156.168.36.192/same_page.php#qwe[/URL]"
      }
    По сути надо делать отсечения по таким символам - пробел, [, (, ", ' . Но что-то не выходит прикрутить к регулярке. Как это грамотнее сделать?

    http://www.phpliveregex.com/p/e0t

    Пробую вот так

    PHP:
    (http|https)://([^\s]*)(156.168.36.192|site.ru)([^\s]*)(\[|\]|\>|\")
    НО все равно последний символ остается. Да и не грамотно это, по моему
     
    Последнее редактирование: 19 дек 2015
  2. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    215
    Симпатии:
    280
    А если просто добавить [, (, ", ' в [^\s]
    Код:
    (http|https)://([^\s]*)(156.168.36.192|site.ru)([^\s\[\'\"(]*)
    
     
    Festem нравится это.
  3. Festem

    Festem Постоялец

    Регистр.:
    4 сен 2014
    Сообщения:
    97
    Симпатии:
    26
    Огромное спасибо, только я чуть поправил и вышло вот так

    Код:
    (http|https)://([^\s]*)(156.168.36.192|site.ru)([^\s\[\'\"\]]*)
     
Статус темы:
Закрыта.