Нужен скрипт замены ссылок т.е адреса заменить на ссылки Например есть адреса: http://www.name.ru или http://name.net или http://www.name.com и [teg]http://www.name.ru|Текст Нужно чтобы первые три он замен... Нужно 2 рег. выражения, помогите пожалуйста.
не знаю как с первыми тремя вариантами а вот с последним можно поступить так.. PHP: <? $text='[teg]http://www.name.ru|Текст[url] это мой сайт заходите'; str_replace('[teg]','<a href="',$text); str_replace('|','">',$text); str_replace('[url]','</a>',$text); echo $text; //<a href="http://www.name.ru">текст</a> это мой сайт заходите ?>
vuzy, обоснуйте использование функции preg_replace() и объясните, почему она используется целых три раза?
Apple будет оно работать... синтаксис правельный. и вместо того что б критиковать лучше бы сказали что вас конкретно не устраивает или предложили свой вариант. Единственный недочет в данной функции что оно поменяет все символы | на "> в сообщении и если есть текст в котором юзер пишет "собака | кошка | корова" вместо своего сообщения получит собака "> кошка "> корова. но это уже вопрос конкретно используемых тэгов и способа записи BBcode ТС функция используется три раза для наглядности =) вопервых она ищет в тексте элемент скажем [teg] и меняет его на <a href=" и так пока не обрабтаем все теги в сообщении.... можно так же использовать целлых два массива для обработки тэгов в одном будут заменяемые тэги в другом будут тэги на которые заменять.
Ну, проверять даже не стану, так как это не выход из данной ситуации. Меня устраивает вариант только из 2 регулярных выражений, а в приведённом примере их уже 3 и то они делают только половину задачи. Суть в том, что первое рег. выражение должно заменять первые 3 www адреса, а 4й не трогать, потому что он обрамлён [teg] после выполнения первого рег. выражения выполняется второе, которое как раз ищет те www адреса которые обрамлены [teg].
vuzy Да не будет оно работать, синтаксис регулярных выражений АБСОЛЮТНО неправильный. Во-первых, отсутствуют ограничители во втором регулярном выражении, а в первом и третьем НЕЯВНО они обозначены квадратными скобками, что делает работу ещё более неправильной, нежели задумано! Регулярные выражения и обычная работа со строками функцией str_replace — в корне разные вещи!
Brothersssddsss так что вам готовый скрипт выложить что б изменять такие ссылки на правельные со всеми вытекающими... Так вы не по адресу обратились тут за вас ничего делать не будут... =) использовать нас не надо. Я лишь посоветовал как решить половину проблеммы а вы вместо того что б попробовать адаптировать функции покапатся в интернете почитать мануал говорите мне: мне за это денег не заплатят... Apple, таки да спасибо что напмнили... функция требует иного подхода... чем обычные строковые функции.
Мой вариант. Разбирайтесь ... оба. PHP: <?php /** * Какой-то текст со ссылками и прочей байдой */ $text = <<<EOD Hello. Write some links: [url=http://www.name.ru]http://www.name.ru[/url] and [url=http://name.net]http://name.net[/url] .. even [url=http://www.name.com]http://www.name.com[/url] Using of BBCodes [teg]http://www.name.ru|Текст[url] EOD; /** * Функциональная часть */ $text = preg_replace('~((?<!(?:\[teg:url\]))(?:http://|http://www\.)(?:[^[:space:]][a-z0-9._-]+)(?!(?:\[url:teg\])))~is', '<a href="$1">$1</a>', $text); $text = preg_replace('#(?:\[teg:url\])((?:http://|http://www\.)(?:[^[:space:]][a-z0-9._-]+))\|(.+?)(?:\[url:teg\])#six', '<a href="$1">$2</a>', $text); // Смотрим, что вышло echo $text; ?> Всё крайне просто. Можно в приступе шизофрении упаковать это в одно единственное регулярное выражение. Но смысл?