Регулярка для всех видов ссылок

D
На сайте с 28.06.2008
Offline
1101
321

Продолжаю учить пхп, дошел до регулярок и там такое задание - получите все ссылки и анкоры из примера

Мой код

$re = '~<a(.*)href(.*)=(.+)([^\"]*)>(.*)<\/a>~m';
$str = '<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>парсинг</title>
<link rel="stylesheet" type="text/css" href="css/styles.css">
<script src="/js/scripts.js"></script>
</head>
<body>
<a class="www" href=\\\'test1.php\\\' > ссылка 1</a>
<a href=\\\'test2.php\\\' class="www"> ссылка 2</a>
<p>Это абзац!</p>
<a href = "test3.php" >ссылка 3</a>
<p>
<a id="test" href="http://site.ru/test4.php">ссылка 4 </a>
</p>
<p class="www">Это <b>абзац!</b></p>
<a href="test5.php">ссылка 5 </a>
<a href="test6.php" class = "www" >с сы лка 6</a>
</body>
</html>';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

// Print the entire match result
var_dump($matches);

В итоге анкоры все правильно вытащил, а ссылки уже второй день не могу все корректно без мусора вытащить. Подскажите плиз идеальную регулярку?

LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#1
дошел до регулярок

не хило так... эти вещи можно месяцами изучать.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
edogs software
На сайте с 15.12.2005
Offline
775
#2

Dram,

Как вариант

$re = '~<a[^>]+href.*?=.*?(?:"|\')(.*?)(?:"|\').*?>(.*?)<\/a>~siu';

Но имейте ввиду на будущее важный нюанс, регулярки для этой цели годятся так себе, одной регуляркой крайне сложно разобрать даже корректный хтмл, а некорректный невозможно в принципе.

Поэтому все решения вида "регуляркой вытаскиваем все ссылки" расчитаны в целом именно на "конкретный пример" (или их набор), шаг влево - шаг вправо - оппаньки.

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
Samail
На сайте с 10.05.2007
Offline
361
#3

~<a.*?href.*?=.*?(?:'|")([^\\]+?)\\*?(?:'|").*?>(.*?)<~mi

Не сказать что идеальная, но для данного примера сгодится

LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#4

Не ребята, вы все молодцы конечно, но вы думаете ТС что-то хоть понял из ваших закорючек? :)

D
На сайте с 28.06.2008
Offline
1101
#5

Леня, я понял примерно 90%, мне пока хватит

edogs software
На сайте с 15.12.2005
Offline
775
#6
LEOnidUKG:
Не ребята, вы все молодцы конечно, но вы думаете ТС что-то хоть понял из ваших закорючек? :)

Good point.

Dram, https://regexr.com/ и https://regexper.com Вам помогут разобраться с готовыми выражениями.

D
На сайте с 28.06.2008
Offline
1101
#7

https://regex101.com мне этот понравился

S
На сайте с 30.09.2016
Offline
469
#8

...

Проехали... ТС это уже знает (regex101.com).

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий