[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с preg_replace()
Zzepish
$text='http://Привет! http://Как ftp://дела? http://это_сцылко ссылка_с_доменом.ru';
$text2=explode(' ',$text);
$count=count($text2);
for($i=0;$i<$count;$i++){
$text2[$i]=preg_replace('/^(http|ftp|https):\/\/|(.com|.ru|.ua)$/i','<a href="'.$text2[$i].'">'.$text2[$i].'</a>', $text2[$i]);
echo $text2[$i].'</br>';
}
Вот кодец! Но выводит не замещенную ссылку (точнее - не только ее) а и оригинал! (( почему(



Спустя 9 часов, 40 минут, 11 секунд (26.05.2012 - 21:34) Zzepish написал(а):
Эх, а думал, что тут знатоки сидят biggrin.gif

Спустя 57 минут, 7 секунд (26.05.2012 - 22:31) inpost написал(а):
Мнение изменилось?

Спустя 17 минут, 53 секунды (26.05.2012 - 22:49) Zzepish написал(а):
inpost
Ну, никто так и не помог с проблемой!

Спустя 11 минут, 56 секунд (26.05.2012 - 23:01) inpost написал(а):
суббота, выходной день. Многих сегодня не было. Не стоит делать поспешных выводов.

Начало шаблона правильно. Код у тебя начинается либо в ftp, http, https, далее :// , всё верно, а дельше?
http:// | - ИЛИ?! То есть ты говоришь, что у тебя строка будет вида такого:
http:/
далее
/ или то, что в скобках (.com) - и конец строки. И всё. Палка, которая обозначает ИЛИ в данном случае должна быть не палкой, а видом:
[a-zа-яё]+ - то есть любые перечисленные символы любое количество раз.
И концовка: .com - в данном случае точка является ЛЮБОЙ СИМВОЛ, чтобы он воспринимался как точка - её надо экранизировать.

Спустя 20 минут, 15 секунд (26.05.2012 - 23:21) Zzepish написал(а):
inpost
$text2[$i]=preg_replace('/^(http|ftp|https):\/\/[a-zA-Zа-яА-Я]+(\.com|\.ru|\.ua)$/i','<a href="'.$text2[$i].'">'.$text2[$i].'</a>', $text2[$i]); - переписал! вообще перестал заменять(

Спустя 5 минут, 18 секунд (26.05.2012 - 23:27) inpost написал(а):
a-z большими писать не надо, ты используешь модификатор i.
Кроме этого у тебя utf-8? Тогда дополнительно надо показывать модификатор u.
А лучше попробуй на каком-о конкретном примере. Не несколько ссылок, а конкретно 1 ссылку возьми и покажи, вот эта ссылка, в ней не работает, а вот этот патерн.
К примеру ссылки с пробелом не бывают, поэтому в патерне мы пробелы не указали, и не находятся. Первые 2 ссылки - в них отсутствует окончание com, ru, ua, которое тебе надо, поэтому их тоже не находит.

Спустя 11 минут, 38 секунд (26.05.2012 - 23:38) Zzepish написал(а):
inpost
Извени! Я идиот) у меня просто ни одного совпадения не было (когда я поменял на твой метод), а я на это внимания не обратил) огромное спасибо)

Спустя 1 минута, 6 секунд (26.05.2012 - 23:39) Zzepish написал(а):
<?php
$text='http://Привет! http://Как ftp://дела? http://это_сцылко http://ссылка_С_доменом.ru';
$text2=explode(' ',$text);
$count=count($text2);
for($i=0;$i<$count;$i++){
$text2[$i]=preg_replace('/^(http|ftp|https):\/\/[a-zа-я0-9_-]+(\.com|\.ru|\.ua)$/ui','<a href="'.$text2[$i].'">'.$text2[$i].'</a>', $text2[$i]);
echo $text2[$i].'</br>';
}
?>
Вот полностью рабочий скрипт под utf-8)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.