Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Регулярные выражения > вырезать ссылки в тексте исключая некоторые домены


Автор: zammar 16.7.2010, 15:17
вообще пишу на php, но рег.выр. perl-овлские так что решил сюда написать

Задача такая: нужно найти все ссылки в тексте исключая например http://forum.vingrad.ru

Такое рег.выр. находит все ссылки у меня.

Код

preg_match_all('/(?:https?|ftp):\/\/[\w\d:;#@%\/$()~_?\+\=\\\.\-&]*/si', $tw_message, $matches);


вот так я думал сделать исключение:

Код

preg_match_all('/(?:https?|ftp):[^(?:forum.vingrad.ru)]\/\/[\w\d:;#@%\/$()~_?\+\=\\\.\-&]*/si', $tw_message, $matches);


Но видимо я не правильно делаю потому как второй вариант вообще ничего не находит.

Автор: sir_nuf_nuf 16.7.2010, 15:28
это да... вы пишете внутри forum.vingrad.ru  внутри []
в этом не смысла, т.к. внутри []  -  перечисляется набор СИМВОЛОВ, которые будут соответветсвовать.

Попробуйте лучше так
Код

preg_match_all('/(?:https?|ftp):\/\/(?!forum\.vingrad\.ru\/)[\w\d:;#@%\/$()~_?\+\=\\\.\-&]*/si', $tw_message, $matches);

Автор: zammar 16.7.2010, 17:40
Действительно заработало. Не знаком был с просмотрами вперед и назад.
Спасибо.

Автор: sir_nuf_nuf 16.7.2010, 19:36
да не за что..
круто, что вы разобрались, что это "поиск вперед"  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)