Задать вопрос
@maiskiykot
Free coder

Почему не срабатывает регулярка?

Приветствую. Что-то сегодня день какой-то - понедельник, наверное. Пытаюсь разобрать строку, точнее набор строк типа:
<a href="/kontrolno-izmeritelnyie-priboryi" itemprop="item" title="Контрольно-измерительные приборы" class="breadcrumbs__item-link" data-v-71>

Создал для этого регулярку:
preg_match_all("!href=\"(.*)\".*title=\"(.*)\".*breadcrumbs__item-link!siU",$str,$matches))

Однако она собака не ловит ни Х. Если сокращаю левую часть до title, то title ловит отлично, а вот ссылку захватывать ни в какую не хочет. Что я тут делаю не так? Всем спасибо!
  • Вопрос задан
  • 126 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 5
Adamos
@Adamos
Если ищешь что-то в кавычках, нужно использовать не \"(.*)\", а \"([^"]*)\"
Ответ написан
iMedved2009
@iMedved2009
Не люблю людей
@PavelMos
.*?
href\=\"(.*?)\".*title=\"(.*)\".*breadcrumbs__item-link

https://regex101.com/r/wDkzxW/1
Ответ написан
Комментировать
@dodo512
Тут классика жанра "catastrophic backtracking" аж 4 раза используется .* и флаг /s.
Когда сокращаете левую часть до title убираете один .* и pcre.backtrack_limit вам хватает.
Нужно ограничить поиск с помощью [^"]* и [^>]* или убрать флаг /s.

preg_match_all('!href="([^"]*)"[^>]*title="([^"]*)"[^>]*breadcrumbs__item-link!siU',$str,$matches))
Ответ написан
Комментировать
@maiskiykot Автор вопроса
Free coder
На самом деле нужно было выбросить siU
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽