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


Автор: Yura_Matsuk 9.8.2008, 23:22
Итак, есть регулярка, которая ищет все ссылки
Код

#<a(.+)>(.+)</a>#


Задача в том, чтобы находить только те ссылки, которые НЕ заключены в тег {openlink} текст _ссылка_ текст {/openlink}
Прочитал прилично материалов, ничего не помогает.

Автор: Anarki 10.8.2008, 11:09
Как вариант вырезать из текста содержимое, которое находится между этими тегами и с новым текстом уже работать. Иногда проще добавить условных операторов, чем реализовывать все в одной регулярке.
Набросок кода.
Код

<?php
// $text - исходный текст
$newText = preg_replace('/{openlink}.+?{/openlink}/','',$text);
if (preg_match('#<a(.+)>(.+)</a>#',$newText,...

Автор: Yura_Matsuk 10.8.2008, 11:25
не понял, зачем в предложенной регулярке знак вопроса.

такой вариант не подходит, т.к. мне нужно преобразовать весь исходный текст и вернуть обратно

я вот почитал предыдущий пост и решил разбить поиск на три части:
1. все, что до первого открывающего тега
2. все, что между тегами {/openlink} .. {openlink}   //от противного )
3. все, что после последнего {/openlink}

Автор: Anarki 10.8.2008, 18:35
Цитата(Yura_Matsuk @  10.8.2008,  14:25 Найти цитируемый пост)
не понял, зачем в предложенной регулярке знак вопроса.

Чтобы не было "жадного" поиска.

Цитата(Yura_Matsuk @  10.8.2008,  14:25 Найти цитируемый пост)
такой вариант не подходит, т.к. мне нужно преобразовать весь исходный текст и вернуть обратно

Да, немного неподумав написал.

Автор: sTa1kEr 12.8.2008, 11:45
Я думаю, этот топик может помочь. http://forum.vingrad.ru/forum/topic-163192.html

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