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


Автор: Ivushka 24.8.2007, 13:54
Привет всем.

Помогите плиз с регулярками.....
Никак с ними не разберусь

есть такой кусок
Код

$v = str_replace("http://", "", $v);
$v = preg_replace('@{(/[^},]+),([^}]+)}@', '<a href="\\1">\\2</a>', $v);
preg_match_all('@{(&quot;.+&quot;|.+),([^}]+)}@', $v, $matches);


работает так при находжении в тексте такой строки
Код

{www.ya.ru, ya}

переделывает ее в нормальную ссылку типа
Код

<a href="www.ya.ru">ya</a>


только работает это все если в тексте есть только одна такая конструкция...
а надо чтобы все такие строки заменялись.

Помогите кто чем может!))

Автор: smartov 24.8.2007, 15:10
Код

<?php

//тестовая строка
$s = <<<END
Line 1
Look here: {http://ya.ru, ya}
Line 2
Or better here: {http://google.com, better then ya}
END;

//регулярка
echo preg_replace('/{(.*),(.*)}/', '<a href="\1">\2</a>', $s);

//одно но: запятые в тексте ссылок не использовать

?>


Автор: Ivushka 24.8.2007, 15:18
smartov, не получается....

строка такая
Код

Наиболее оптимальными считаем подшипники {www.podshipnik.ru/manufacturers/foreign/element_261.html, SNR} и японские подшипники {www.podshipnik.ru/manufacturers/foreign/element_313.html, KOYO}.


а регулярка выбирает от первой { до последней } 
получается ссылка
Код

<a href="www.podshipnik.ru/manufacturers/foreign/element_261.html, SNR} и японские подшипники {www.podshipnik.ru/manufacturers/foreign/element_313.html"> KOYO</a>


а нужны 2 ссылки!!

Автор: Black_leopard 24.8.2007, 18:28
Нужно использовать ленивые кванторы, т.е.

Код

echo preg_replace('/{(.*?),(.*?)}/', '<a href="\1">\2</a>', $s);


Автор: -=Ustas=- 24.8.2007, 20:43
Цитата(Black_leopard @  24.8.2007,  18:28 Найти цитируемый пост)
Нужно использовать ленивые кванторы

Может квантификаторы жадности smile Хотя какая разница, суть одна осталась.

Автор: smartov 25.8.2007, 00:12
Ivushka, ааа.. smile да забыл что в одной строке быть могут. Жадность надо отключать, как подсказывают -=Ustas=- и Black_leopard
Можно так, как подсказал Black_leopard, а можно отключить жадность для всего выражения
Код

preg_replace('/{(.*),(.*)}/U', '<a href="\1">\2</a>', $s);

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