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

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

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

 

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

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

тема: парсить ссылки в html-код
 
 автор: sni   (07.09.2007 в 12:07)   письмо автору
 
 

нужно парсить ссылки типа http://**** ,https и ftp в html код (<a href="*** )





не могу придумать регулярку. подскажите?

   
 
 автор: sni   (07.09.2007 в 13:05)   письмо автору
 
   для: sni   (07.09.2007 в 12:07)
 

нашел на форуме:

автор: Stereo (07.07.2006 в 20:32)
Может быть криво. Если что не так - исправьте.
$text = preg_replace('/\\b((https?|ftp|file):\/\/|www\.)[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]/i', '<a href="\\0">\\0</a>', $text);



подскажите что там криво и как исправить?

   
 
 автор: SHAman   (07.09.2007 в 13:17)   письмо автору
 
   для: sni   (07.09.2007 в 12:07)
 

В тексте есть ссылки нормальные? Или только текст, в котором могут быть урлы?

   
 
 автор: SHAman   (07.09.2007 в 13:37)   письмо автору
 
   для: SHAman   (07.09.2007 в 13:17)
 

Пофиг. Вот мое решение:

<?
$text 
"Текст <a href='http://mail.ru'>мыло</a> еще ссылка http://softtime.ru ftp://mail.ru https://gmail.com и еще текст";
$reg "/\s+((ftp|https?):\/\/)(www\.)?([a-z0-9:\/?&=%#_.-]+)\s+/i";
$replace "<a href='\$1\$3\$4'>\$1\$3\$4</a>";
$text preg_replace("$reg""$replace"$text);
print 
$text;
?>

   
 
 автор: Faraon   (07.09.2007 в 13:59)   письмо автору
 
   для: SHAman   (07.09.2007 в 13:37)
 

Поправлю маленько ваше решение :)

<?
$text 
"Текст <a href='http://mail.ru'>мыло</a> еще ссылка http://softtime.ru ftp://mail.ru https://gmail.com и еще текст";
$reg "/(\s?)((ftp|https?):\/\/)(www\.)?([a-z0-9:\/?&=%#_.-]+)(\s)/i";
$replace "$1<a href='$2$4$5'>$2$4$5</a>$6";
$text preg_replace("$reg""$replace"$text);
print 
$text;
?>

   
 
 автор: kasmanaft   (07.09.2007 в 14:00)   письмо автору
 
   для: SHAman   (07.09.2007 в 13:37)
 

Зачем (www\.)? - он по-любому попадет и под ([a-z0-9:\/?&=%#_.-]+)
Почему ссыкли должны быть окружены пробелами? а если я хочу в кавычки их взять? ))
А если мне надо на википедию, скажем, ссылку дать http://ru.wikipedia.org/wiki/блаблабла ?

   
 
 автор: Faraon   (07.09.2007 в 14:05)   письмо автору
 
   для: kasmanaft   (07.09.2007 в 14:00)
 

>Зачем (www\.)? - он по-любому попадет и под ([a-z0-9:\/?&=%#_.-]+)
Здесь согласен
>Почему ссыкли должны быть окружены пробелами? а если я хочу в кавычки их взять? ))
это дело вкуса, хотите делайте кавычки
>Почему бы вместо ([a-z0-9:\/?&=%#_.-]+) не использовать \S+ ... все равно бяку можно засунуть.
Тоже в полне согласен.

   
 
 автор: kasmanaft   (07.09.2007 в 14:10)   письмо автору
 
   для: Faraon   (07.09.2007 в 14:05)
 

> это дело вкуса
Нуну)) Я выступаю от лица пользователя...

> Тоже в полне согласен.
Блин, успел увидеть) В таком случае нельзя будет опять-таки урлы в кавычки брать, запятую после них ставить...

   
 
 автор: SHAman   (07.09.2007 в 15:21)   письмо автору
 
   для: kasmanaft   (07.09.2007 в 14:10)
 

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

Можно, конечно, написать заглядывание назад, на проверку (href=['"]?) но мне не захотелось :)

   
 
 автор: kasmanaft   (07.09.2007 в 15:45)   письмо автору
 
   для: SHAman   (07.09.2007 в 15:21)
 

Ой, ладно "не захотелось" =]

Кстати, так (href=['"]?) нельзя)

   
 
 автор: SHAman   (07.09.2007 в 16:28)   письмо автору
 
   для: kasmanaft   (07.09.2007 в 15:45)
 

Ясен пень, нельзя. Нужно как-то так, наверное:
(?<!href=['"]?)

   
 
 автор: SHAman   (07.09.2007 в 16:30)   письмо автору
 
   для: SHAman   (07.09.2007 в 16:28)
 

Ух ты... Интересно. Спасибо:)

   
 
 автор: SHAman   (07.09.2007 в 16:41)   письмо автору
 
   для: SHAman   (07.09.2007 в 16:30)
 

Намутил только это:
$reg = "/([^='\"])((ftp|https?):\/\/)([a-z0-9:\/?&=%#_.-]+)/i";

Но тогда текст взять в кавычки не получится...

   
 
 автор: kasmanaft   (07.09.2007 в 16:44)   письмо автору
 
   для: SHAman   (07.09.2007 в 16:41)
 

Но можно вот так: (?<!(href=['"])|(href=)), не очень смотрицца вообще-то....
ну не суть важно... зато работает)

   
 
 автор: SHAman   (07.09.2007 в 16:56)   письмо автору
 
   для: kasmanaft   (07.09.2007 в 16:44)
 

Ну да, как вариант... А без заглядываний? К тому же, урл может быть указан, скажем, для src картинки... Что теперь, и их проверять заглядываниями?

   
 
 автор: kasmanaft   (07.09.2007 в 17:18)   письмо автору
 
   для: SHAman   (07.09.2007 в 16:56)
 

Да хз.. Можно и проверить, почему нет?
Можно, наверное, ограничиться =['"]? .. или даже \S["']?

Есть еще в css url(...) =]
А можно урл в конце предложения привести и точку поставить...

   
 
 автор: SHAman   (07.09.2007 в 17:38)   письмо автору
 
   для: kasmanaft   (07.09.2007 в 17:18)
 

Вот чет не получается....

$reg = "/([^=]['\"]?)((?:ftp|https?):\/\/)([a-z0-9:\/?&=%#_.-]+)/i";
$replace = "$1<a href='\$2\$3'>\$2\$3</a>";

   
 
 автор: SHAman   (07.09.2007 в 17:42)   письмо автору
 
   для: SHAman   (07.09.2007 в 17:38)
 


$reg = "/([^=].)((?:ftp|https?):\/\/)([a-z0-9:\/?&=%#_.-]+)/si";
$replace = "$1<a href='\$2\$3'>\$2\$3</a>";
$text = preg_replace("$reg", "$replace", $text);

   
 
 автор: kasmanaft   (07.09.2007 в 18:01)   письмо автору
 
   для: SHAman   (07.09.2007 в 17:42)
 

Тогда, написав урлы через пробел, заменятся не все, потому что ОНО съест два символо "не = и следующий". От линка останется ttp://...
Это, по-моему, как раз тот случай, когда нужно заглянуть назад.

Можно, конечно, придумать ченить... Но зачем..
([^='\"]['\"]?)((?:ftp|http..........

   
 
 автор: SHAman   (07.09.2007 в 18:12)   письмо автору
 
   для: kasmanaft   (07.09.2007 в 18:01)
 

угу. Ладно, оставляем вышеприведенный тобой вариант:)

   
 
 автор: Саня   (07.09.2007 в 17:40)   письмо автору
 
   для: sni   (07.09.2007 в 12:07)
 

http://php.spb.ru/php/url2.html
http://webcode.ru/re/href/

   
 
 автор: SHAman   (07.09.2007 в 17:54)   письмо автору
 
   для: Саня   (07.09.2007 в 17:40)
 

Так не интересно:) Интересно самому:) Мозгом.

   
Rambler's Top100
вверх

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