Получить все ссылки со страницы

Статус
В этой теме нельзя размещать новые ответы.

Stripe

Участник
Регистрация
20 Окт 2007
Сообщения
164
Реакции
9
Как должна выглядеть регулярка, получающая все ссылки со страницы?
 
Решение:
PHP:
# Пример в PHP

$text = '<a href="http://site1.ru">Site 1</a> Any text <a href="http://site2.ru">Site 2</a>';

$out = array();
preg_match_all('|<a.* href=(.*)>(.*)</a>|U', $text, $out);

# $out будет содержать массив данных

Для просмотра ссылки Войди или Зарегистрируйся
 
  • Нравится
Реакции: XUC
Есть небольшой нюанс в указанной регулярке: она вырежет не только ссылки типа Для просмотра ссылки Войди или Зарегистрируйся, но и "якоря", например такие:

HTML:
<a name="anchor">Point</a>
Any text
Any text
Any text
<a href="#anchor">Point</a>

а подобные ссылки зачастую не нужны.
Поэтому я бы модифицировал вышеописанную регулярку:

PHP:
preg_match_all('|<a.* href=(.http.*)>(.*)</a>|U', $text, $out); 

# $out будет содержать массив данных
 
а если таким:
Код:
@"(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&amp;%\$#_]*)?"
 
жадность регулярок

я полдня протрахался у меня скрипт хавал парашу пока не заменил

.* на [^>]* то есть, что не дает выйти за пределы тега,
начал юзать прогу которую поставил год назад :D RegexBuddy3
 
  • Нравится
Реакции: XUC
Вы можете использовать это:
PHP:
preg_match_all('@<a(?:.*)href=[\'"]([^"\']*)[\'"](?:[^>])>@i', $text, $matches);

и их использование массив $ Matches
 
  • Нравится
Реакции: XUC
([</a]*) - заэкранировать "/" нужно :)
 
([</a]*) - заэкранировать "/" нужно :)
Ничего экранировать не надо ни в коем случае! То, что стоит в квадратных скобках - группа символов, их экранировать не надо.
То есть там перечислены символы, которые могут встретиться 0 и более раз, но никакие другие символы, кроме перечисленных в [] учитываться не будут.
В [] можно писать любые символы и они будут рассматриваться регуляркой без всякого экранирования.
 
В [] можно писать любые символы …
Ну не совсем любые, надо экранировать «]», «-» и что касается PHP, надо экранировать ограничивающий символ (даже в []).
И конкретно в выражении:
PHP:
preg_match_all("/<a.*href=['\"]([^\"']+).*>([</a]*)/isU", $text, $matches);
надо писать [<\/a]
либо изменить ограничитель, например на «%»:
PHP:
'%<a.*href=[\'"]([^"\']+).*>([</a]*)%isU'
 
  • Нравится
Реакции: XUC
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху