За последние 24 часа нас посетили 16869 программистов и 1296 роботов. Сейчас ищут 1416 программистов ...

Получить ссылку из тега <a доработка регулярки

Тема в разделе "Регулярные выражения", создана пользователем Rassol2, 22 авг 2019.

  1. Rassol2

    Rassol2 Новичок

    С нами с:
    8 июл 2019
    Сообщения:
    31
    Симпатии:
    1
    Здравствуйте.
    У меня тривиальная задача, но я что то сильно туплю. Не могу составить правило которое бы получаля ссылку из тега <a
    Раньше мое правило прекрасно работало и выглядело оно так.
    Код (Text):
    1. #<a.+?href="([^"]+)"#su
    Но потом попался сайт где ссылки в теге A записаны в таком виде
    Код (Text):
    1. <a href=https://svetavto.com.ua/catalog.php?idg=21  >
    Теперь нужно доработать правило, что бы оно собирала ссылки, учитывая то что ссылка может быть окружена символом " а может нет.

    То есть входные 3 тестовые ссылки.

    Код (Text):
    1. <a href=https://svetavto.com.ua/catalog.php?idg=21  >
    2. <a href="/stati/">
    3. <a class="rassol2" href="http://svetavto.com.ua/stati/">
    мне нужно поправить правило, указав ему что после href= можете быть " а можете и не быть.
    Так же после ссылки может быть " а можете >

    Подскажите как сделать.
     
  2. brevis

    brevis Активный пользователь

    С нами с:
    23 июл 2019
    Сообщения:
    69
    Симпатии:
    20
  3. Rassol2

    Rassol2 Новичок

    С нами с:
    8 июл 2019
    Сообщения:
    31
    Симпатии:
    1
    Здравствуйте.
    Спасибо что обратили внимание. Но ваше правило подойдет только под первую ссылку. А нужно что бы правило доставало url со всех трех вариантов.

    Код (Text):
    1. <a href=https://svetavto.com.ua/catalog.php?idg=21  >
    2. <a href="/stati/">
    3. <a class="rassol2" href="http://svetavto.com.ua/stati/">
     
  4. brevis

    brevis Активный пользователь

    С нами с:
    23 июл 2019
    Сообщения:
    69
    Симпатии:
    20
    Специально же ссылку оставил на regex101.
    Может так будет яснее:
    PHP:
    1. $text = '
    2. <a href=https://svetavto.com.ua/catalog.php?idg=21  >
    3. <a href="/stati/">
    4. <a class="rassol2" href="http://svetavto.com.ua/stati/">
    5. ';
    6.  
    7. preg_match_all('/href=["\']?([^"\'>]+)["\']?/', $text, $match);
    8. print_r($match[1]);
    P.S. А вообще правильно решать эту задачу с помощью DOMDocument https://glot.io/snippets/ff9z7dldc5
     
    #4 brevis, 22 авг 2019
    Последнее редактирование: 22 авг 2019
  5. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    /href="(.*)"/gm
     
  6. Rassol2

    Rassol2 Новичок

    С нами с:
    8 июл 2019
    Сообщения:
    31
    Симпатии:
    1
    спасибо изучаю.
    Извините сразу не обратил внимание что это ссылка.

    Я как то сразу смотрел в сторону библиотек дум, и simple_html_dom но из за гибкости был выбран вариант писать на чистых регуляторах.
    Тем более что в проекте нету задач по полному разбору дом дерева html.
    --- Добавлено ---
    Да спасибо ваш вариант работает на ура!