Работа с регулярными выражениями

olegking

Guest
Работа с регулярными выражениями

Подскожите пожалуйста, дан текст, например $str и надо в нем произвести поиск всех слов $str1 и надо установить на них ссылку из $str2, но проблема в том что на $str1 уже может стоять ссылка, тогда не надо нечего с ней делать.
$str1='zamenamena';
$str2='http://zamenamena.ru';
$str='olewr zamenamena fjdsofid <a href=http://ddd.ru>zamenamena</a>ыв фывфывф ыв <a href=http://ddd.ru>ещё одна zamenamena которую не надо заменять</a>';
$str= preg_replace("","<a href=$str2>$str1</a>",$str); - надо что-то типа такого, если я всё правильно думаю
 

SeaGull

Junior Member
1. Все имеющиеся ссылки собираешь в массив, заменяя их в тексте на уникальные метки вроде #1#, #2# и т.д.

2. Заменяешь подстроку 'zamenamena' на ссылки.

3. Заменяешь метки обратно на ссылки из массива.
 

olegking

Guest
я тебя не понел, покажи плз на примере
 

SeaGull

Junior Member
$str='olewr zamenamena fjdsofid <a href=http://ddd.ru>zamenamena</a>ыв фывфывф ыв <a href=http://ddd.ru>ещё одна zamenamena которую не надо заменять</a>';

1. Все имеющиеся ссылки собираешь в массив, заменяя их в тексте на уникальные метки вроде #1#, #2# и т.д.

$str='olewr zamenamena fjdsofid #1#ыв фывфывф ыв #2#';

$ZamenaList=array("<a href=http://ddd.ru>zamenamena</a>", "<a href=http://ddd.ru>ещё одна zamenamena которую не надо заменять</a>");

2. Заменяешь подстроку 'zamenamena' на ссылки.

$str='olewr <a href="link">zamenamena</a> fjdsofid #1#ыв фывфывф ыв #2#';

3. Заменяешь метки обратно на ссылки из массива.

$str='olewr <a href="link">zamenamena</a> fjdsofid "<a href=http://ddd.ru>zamenamena</a> ыв фывфывф ыв <a href=http://ddd.ru>ещё одна zamenamena которую не надо заменять</a>';
 

olegking

Guest
Ты либо не понял, либо не всё четко разъяснил. Я же не знаю какие будут ссылки, может там будет другой текст, тогда как мне составить массив из сылок ???
 

SeaGull

Junior Member
Тьфу ты... Ну конечно я не предлагаю вручную массив написать. Автоматом собираешь его из текста:
PHP:
preg_match_all("|(<a .+</a>)|U", $str, $ZamenaList);
$ZamenaList=$ZamenaList[0];
------
Не знаю, почему после </a> форум пробел ставит - там его не должно быть.

-
 

olegking

Guest
Да я прочитал эти статьи, хорошие, но на все мои вопросы не отвечают.

$str1='zamenamena';
$str2='http://zamenamena.ru';
$str='olewr zamenamena fjdsofid <a href=http://ddd.ru>zamenamena</a>ыв фывфывф ыв
<a href=http://ddd.ru>ещё одна zamenamena которую не надо заменять</a>';
preg_match_all("|(<a .+</a>)|U", $str, $zamenalist);
$zamenalist=$zamenalist[0];
$str= preg_replace("|(<a .+</a>)|U",":::12345:::",$str);
$str=str_replace("<a href=$str2>$str1</a>", "$str1", $str);


$str= preg_replace("|:::12345:::|U","$zamenalist",$str);

У меня :::12345::: служит как идентификатор, но я не знаю как заменять идентификатор обратно на значение.
SeaGull> Если у тебя есть ICQ не мог бы ты сказать её ???
 

SeaGull

Junior Member
PHP:
preg_match_all("|(<a .+</a>)|U", $str, $zamenalist); 
$zamenalist=$zamenalist[0];
for ($i=0; $i < count($zamenalist); $i++){$str=str_replace($zamenalist[$i], "#$i#", $str);}
$str=eregi_replace($str1, "<a href=$str2>$str1</a>", $str);
for ($i=0; $i < count($zamenalist); $i++){$str=str_replace("#$i#", $zamenalist[$i], $str);}
 
Сверху