Замена слов ссылками с игнорированием замены внутри ссылки

Med-Doc

Новичок
Замена слов ссылками с игнорированием замены внутри ссылки

Здравствуйте!
Есть функция для замены текстовых слов,

PHP:
<?
function GlossaryFilter($text){ // Функция замены по маске
  $glossfile = @file("".$_SERVER['DOCUMENT_ROOT']."/glossary.txt"); // Прочли файл
    foreach($glossfile as $mask_word ){
    $token = explode("|",$mask_word);
    if(stristr(trim($text),$token[0])){ // Если найдено слово из списка
    $text = str_replace ($token[0],"<a href=\"".trim($token[1])."\" target=\"_blank\">".$token[0]."</a>",$text); // заменяем его на ссылку
    }
    }
  return $text; // вернули текст
}
?>
словосочетаний на ссылки из текстового документа, формата содержания:

функций|http://www.site.ru
Perl 5 с небольшими|http://www.site2.ru
Но в обрабатываемых данных функции, есть ссылки, например:


Библиотека PCRE является набором функций, которые реализуют поиск по шаблону, используя синтаксис, подобный <a href="http://site3.ru">синтаксису Perl 5 с небольшими отличиями</a>.

Необходимо чтобы функция не трогала текст внутри ссылок, т.е. Perl 5 с небольшими
P.S. Ссылок в обрабатываемых данных может быть несколько.

Заранее спасибо!:)
 

findnext

Новичок
.

-~{}~ 05.04.09 16:31:

что то в вопрос никак не въехать...

-~{}~ 05.04.09 16:32:

preg_match_all('|<a.* href=(.*)>(.*)</a>|U', $text, $out);
ну вот так получаешь содержимое всей ссылки и меняй как хочешь далее
 

Med-Doc

Новичок
может в условии if(stristr(trim($text),$token[0])) добавить отрицание preg_match_all('|<a.* href=(.*)>(.*)</a>|U', $text, $out);
?

-~{}~ 06.04.09 02:09:

Сделал:
PHP:
function GlossaryFilter($text){ // Функция замены по маске
  $glossfile = @file("".$_SERVER['DOCUMENT_ROOT']."/cache/glossary.txt"); // Прочли файл
    foreach($glossfile as $mask_word ){
    $token = explode("|",$mask_word);
    if(stristr(trim($text),$token[0])){ // Если найдено слово из списка
	if(!preg_match_all("|<a.* href=(.*)>(.*)".$token[0]."(.*)</a>|U", $text, $out)){ // Проверка присутствие ключевого слова внутри ссылки
    $text = str_replace ($token[0],"<a href=\"".trim($token[1])."\" target=\"_blank\">".$token[0]."</a>",$text); // заменяем его на ссылку
	}
    }
    }
  return $text; // вернули текст
}
Но возникла проблема со знаком перехода на следующую строку, т.е. \n
Как сделать регулярное выражение не чуствительное к \n ?
 
Сверху