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

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

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

 

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

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

тема: Не удовлетворяет результат preg_replace
 
 автор: AlexDF   (04.04.2012 в 18:04)   письмо автору
 
 

Помогите пожалуйста изменить результат в данной функции например при значении
$string = 'http://www.softtime.ru/';
preg_replace('/(http:\/\/)?(www\.)?([_a-z0-9.-]+\.[a-z]{2,6})([_a-z0-9.-\/\?=&#\-%]*)/i', '<a href="http://www.\\0" target="_blank" rel="nofollow">\\0</a>', $string)

чтобы в результате в ссылке не повторялись 'http://www.'
но при значении
$string = 'softtime.ru/';

строка 'http://www.' присутствовала

  Ответить  
 
 автор: Sfinks   (04.04.2012 в 18:25)   письмо автору
 
   для: AlexDF   (04.04.2012 в 18:04)
 

Исправьте строку замены так:
'<a href="http://www.$3$4" target="_blank" rel="nofollow">\\0</a>'

но учтите, что www. в адресе может и отсутствовать. и что www.softtime.ru совсем не эквивалентно softtime.ru ! Поэтому я бы сделал так:
'<a href="http://$2$3$4" target="_blank" rel="nofollow">\\0</a>'

  Ответить  
 
 автор: AlexDF   (05.04.2012 в 11:48)   письмо автору
 
   для: Sfinks   (04.04.2012 в 18:25)
 

Спасибо огромное! Помогите пожалуйста еще доработать данное регулярное выражение, в котором будут перечислслятся все зоны .ru .com итд.(а также .рф) Потому как сейчас любая латиница разделенная точкой без пробела распознается как ссылка.

  Ответить  
 
 автор: Sfinks   (05.04.2012 в 12:19)   письмо автору
 
   для: AlexDF   (05.04.2012 в 11:48)
 

замените
\.[a-z]{2,6}
на
\.(ru|com|org|net|fr|info|рф|itditp)

но зачем вам .рф, если ваше РВ домен на кирилице не пропустит?

  Ответить  
 
 автор: AlexDF   (05.04.2012 в 12:53)   письмо автору
 
   для: Sfinks   (05.04.2012 в 12:19)
 

Поэтому я к вам и обратился с просьбой подредактировать мое РВ, чтобы строка сервер.рф попадала в условие.
Поскажите пожалуйса, что означает itditp в вашем выражении.
Очень признателен вам за ответы.

  Ответить  
 
 автор: Sfinks   (05.04.2012 в 13:54)   письмо автору
 
   для: AlexDF   (05.04.2012 в 12:53)
 

Вот корректный шаблон для поиска url:
$pattern = "#http://(([а-яёa-z\d][а-яёa-z\d\-]*\.)+(ru|com|org|net|fr|info|рф|itditp)(/([а-яё\w\-\.]*[а-яё\w\-/]{1})*(\?(([a-z][\w\-]*)?(=(%[a-z\d]{2}|[\w\-\.\+])*)?)?(&(amp;)?(([a-z][\w\-]*)?(=(%[a-z\d]{2}|[\w\-\.\+])*)?)?)*)?)?)#ui";

itditp - дальнейшее перечисление всех зон которые вам нужны.

$replace будет выглядеть так:
'<a href="http://$1" target="_blank" rel="nofollow">\\0</a>'

И не делайте http:// не обязательным. Слишком много свободы! Не переломятся написать http://

  Ответить  
 
 автор: AlexDF   (05.04.2012 в 14:10)   письмо автору
 
   для: Sfinks   (05.04.2012 в 13:54)
 

Спасибо Вам большое! Очень благодарен.

  Ответить  
Rambler's Top100
вверх

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