Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Регулярное выражение. Url...
 
 автор: UnFast   (14.07.2008 в 16:31)   письмо автору
 
 

Нужно регулярное выражение которое будет заменять:

http://site.ru
на
<a href="http://site.ru">http://site.ru</a>

------------------------------------------------------------------------------------------------------------------------------

При условие, что в url может содержаться символы: ? . / & = и так далее.
Одним словом, все символы, которые могут быть url.

Пример заменяемого url: http://www.site.ru/softtime/index.php?id=12&time=128

   
 
 автор: sms-send   (14.07.2008 в 17:07)   письмо автору
 
   для: UnFast   (14.07.2008 в 16:31)
 

<?php

$text 
preg_replace('~http://\\S+~''<a href="\\0">\\0</a>'$text);



Предполагается, что переменная $text содержит текст, уже обработанный htmlspecialchars.

   
 
 автор: AcidTrash   (14.07.2008 в 17:29)   письмо автору
 
   для: sms-send   (14.07.2008 в 17:07)
 

Такое выражение не пропустит
 www.site.ru/softtime/index.php?id=12&time=128

   
 
 автор: sms-send   (14.07.2008 в 17:36)   письмо автору
 
   для: AcidTrash   (14.07.2008 в 17:29)
 

Про угадывание ссылок в тексте никто не говорил. Только со схемой http.

   
 
 автор: UnFast   (14.07.2008 в 17:50)   письмо автору
 
   для: sms-send   (14.07.2008 в 17:36)
 

Твой вариант неподходит...
А вообще, ссылка должна заменяться при условие, что есть http!!!

   
 
 автор: sms-send   (14.07.2008 в 18:21)   письмо автору
 
   для: UnFast   (14.07.2008 в 17:50)
 

>Твой вариант неподходит...


А конкретней можно?) Что именно не подходит?

   
 
 автор: UnFast   (14.07.2008 в 18:26)   письмо автору
 
   для: sms-send   (14.07.2008 в 18:21)
 

Твоё рег.выражение неограничено, то есть под действие замены попадают ненужные символы.

   
 
 автор: sms-send   (14.07.2008 в 18:40)   письмо автору
 
   для: UnFast   (14.07.2008 в 18:26)
 

\\S поменять на [,.!@#№*$%&()_+/?=\\-;:\\~\\dA-Za-zА-Яа-яЁё]

   
 
 автор: GeorgeIV   (14.07.2008 в 18:58)   письмо автору
 
   для: sms-send   (14.07.2008 в 18:40)
 

<?php
$var_text 
" text new link1 = http://site.ru ".
"text new link2 = http://php.net ".
"text new link3 = http://softtime.ru/forum/addpost.php?id=2&theme=2 ";
$pattern "/(http:\/\/\S*\s+)/";
$count preg_match_all($pattern$var_text$mucho);
for (
$i=0$i $count$i++)
$var_text =  str_replace($mucho[0][$i], '<a href ="'.$mucho[0][$i].'">'.$mucho[0][$i].'</a>'$var_text);
echo 
$var_text;

?>
Немного через зад, но рабочий день закончился, доделать некогда.

   
 
 автор: sms-send   (14.07.2008 в 19:02)   письмо автору
 
   для: GeorgeIV   (14.07.2008 в 18:58)
 

Эмм.. а чем этот вариант функционально отличается от моего первого варианта, кроме обязательного наличия пробельных символов в конце ссылки?)) Которые, кстати, в эту ссылку попадут. И зачем так вымудряться "через зад", если существует preg_replace ?)

+ строку всё-таки сначала нужно обработать htmlspecialchars, иначе будут проблемы как минимум с символом "&"

   
 
 автор: AcidTrash   (14.07.2008 в 22:41)   письмо автору
 
   для: GeorgeIV   (14.07.2008 в 18:58)
 

to GeorgeIV
Вообщето имелось ввиду заменить, а не выбрать, для начала.
sms-send заметил правильно, что для замены существует preg_replace.

   
 
 автор: GeorgeIV   (15.07.2008 в 10:43)   письмо автору
 
   для: AcidTrash   (14.07.2008 в 22:41)
 

А как ты одним реплэйсом заменишь все (неопределенное заранее количество в не определенном месте, судя по вопросу) вхождения http?

   
 
 автор: UnFast   (14.07.2008 в 19:39)   письмо автору
 
   для: sms-send   (14.07.2008 в 18:40)
 

Почти то.. Только мне нужно, исключить из замены символ < или > (&gt; &lt;)
и сами символы и их html эквиваленты..

например http://site.ru/>
то меняем на <a href="http://site.ru/">http://site.ru/</a>>

   
 
 автор: sms-send   (14.07.2008 в 19:45)   письмо автору
 
   для: UnFast   (14.07.2008 в 19:39)
 

Угловые скобки и так исключены, а эквиваленты то зачем исключать?
Вполне легальная ссылка:

http://site.ru/?var1=123&gt;

UPD:

Хотя и правда, обрабатываем ведь html код...

~http://(?:[,.!@#№*$%()_+/?=\\-;:\\~\\dA-Za-zА-Яа-яЁё]|&(?!lt;|gt;))+~

   
 
 автор: UnFast   (14.07.2008 в 20:17)   письмо автору
 
   для: sms-send   (14.07.2008 в 19:45)
 

Теперь правильно работает...

Респект тебе sms-send.

   
 
 автор: AcidTrash   (14.07.2008 в 22:57)   письмо автору
 
   для: UnFast   (14.07.2008 в 20:17)
 

>Теперь правильно работает...

Интересно, где же такие ссылки то есть? Начиналось то все как я понимаю с обычного парсинга и разбора html-страниц, где ссылки реальные и как вы потом указали, обязательно должны начинаться с http://.
Первоначальной регулярки от sms-send вполне хватило бы.

P.S. ТЗ надо изначально со всеми аспектами составлять.

   
 
 автор: AcidTrash   (14.07.2008 в 22:52)   письмо автору
 
   для: sms-send   (14.07.2008 в 19:45)
 

-

   
 
 автор: GeorgeIV   (14.07.2008 в 17:07)   письмо автору
 
   для: UnFast   (14.07.2008 в 16:31)
 

Что т я не понял? Какая же тут замена?
$urlo = "http://site.ru";
$urlo_with_link ='<a href="'.$urlo.'">'.$urlo.'</a>';

   
 
 автор: UnFast   (14.07.2008 в 17:45)   письмо автору
 
   для: GeorgeIV   (14.07.2008 в 17:07)
 

Предпологается динамический адрес..
И переменная будет содержать например некий текст:
$var = "php site http://softtime.ru/ ...";

   
 
 автор: GeorgeIV   (14.07.2008 в 17:53)   письмо автору
 
   для: UnFast   (14.07.2008 в 17:45)
 

Так все равно она будет содержать УРЛ как ссылку и как текстовую часть. Что то мне тогда непонятна постановка вопроса.
Для чего тут регулярное выражение, если надо одну переменную с урлом вставить в два места.

   
 
 автор: UnFast   (14.07.2008 в 18:01)   письмо автору
 
   для: GeorgeIV   (14.07.2008 в 17:53)
 

Смотри, спецально для тебя напишу новую переменную:

$var_text = " text new link1 = http://site.ru
text new link2 = http://php.net
text new link2 = http://softtime.ru/forum/addpost.php?id=2&theme=2 ";

Текст может быть произвольный... а url, начинающиеся с http нужно заменить на <a href.........</a>

   
 
 автор: GeorgeIV   (14.07.2008 в 18:12)   письмо автору
 
   для: UnFast   (14.07.2008 в 18:01)
 

Понятно. Тогда начало - http, а конец - пробельный символ или граница слова. Ща попробую.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования