jumash

Рейтинг
53
Регистрация
02.02.2009
Должность
Perl

#<a[^>]*?\shref\s*=\s*[^\w]?\/?([^\s>'\"]+)[^>]*?>#ism

Я пару символов добавил и цитату :) Торопился весьма и забыл что может быть khref и убрал два слеша после https?:

Возвращайся и пополемизируем ещё :) Для меня они больная тема - в Perl-парсерах)))

Не схавает, я ещё немного поменял её)

Ну не знаю что тут сложного :)

Тут или знаешь их или не знаешь :)

Тем более что если запутаешься - можно легко написать новую за короткое время

Да и читать просто весьма

Тег начинается с a, идём до первого встреченного href, подразумеваем наличие пробелов, смотрим на присутствие нашего сайта, если нет - игнорируем любые другие сайты, потом гребём всё внутри href кроме пробелов и кавычек (тут косяк может быть если урл кривой и кавычки внутри), потом идём до конца тега

Весьма простая :) Всего один забегайчик)

Изобразил стратегический вариант)


#<a[^>]*?\shref\s*=\s*[^\w]?(https?:\/\/(www\.)?oursite\.com/)?(?!https?:)/?([^\s>'\"]+)[^>]*?>#ism

Что насчёт href= href= - множественных href в тегах - это уже конкретный изврат и форс-мажор - в данном случае эта регулярка выгребет первый href, а для конкретного случая проще будет написать специальный разборщик

jumash добавил 24.07.2009 в 09:58

joost:
что значить это?

Любой символ кроме >

не, такое тоже не катит - попробовал. Я в перле уже давно и привык что там как-то всё по PCRE-шному, так сказать :)

завтра допилю, спать хочется уже

Интересно прям стало

А, ну правильно

Пыха не реагирует на \1


echo "Jumash variants<hr>";
preg_match_all("#<a.*?href\s*=\s*(['\"]?)(?!http:\/\/(?!(www\.)?oursite\.com))([^\s>'\"]+)(['\"]?).*?>#ism",$txt,$links);
print_r($links);

echo "<hr>";
preg_match_all("#<a.*?href\s*=\s*(['\"]?)(?!http:\/\/(?!(www\.)?oursite\.com))(http:\/\/(www\.)?oursite.com)?([^\s>'\"]+).*?>#ism",$txt,$links);
print_r($links);

Можно допилить в целом до идеала - но тут сомнительный выйгрыш будет)

http://gskinner.com/RegExr/ - тут проверял

Чуть позже в пыхе проверю

И кстати - можно как-то поадекватнее общаться? Такое чувство будто со школотой веду беседу а не с программистом.

:D Я тоже пишу без проверки, - но читаю ТС и не хвастаюсь о своей деятельности :)

Остальное, наверное, тоже надо подправить?:)

bearman:
я бы сделал так

preg_match_all('#<a [^>]*?href\s*=\s*(\S+?)[>\s]#ism',$hmtl,$links);

полученные рещультаты просто бы отфильтровал на кавычки и был счастлив тому, что я гений в очередной раз.

Не обольщайся. Внутренние ссылки - это не только те, что с / начинаются.

Ну и кстати конструкция <a [^>]*?href бессмысленна) Модификатор жадности и так не дойдёт до >

joost, http://www.pcre.ru/docs/php/text/stdsyntax/ - раздел Утверждения и дальше

Насчёт target=_blank - дальше две регулярки ещё которые цепляют внутренние ссылки нормально - включая ссылки с http://свойдомен

Всего: 633