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

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

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

 

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

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

тема: Замена url
 
 автор: Guest11   (16.09.2006 в 19:26)   письмо автору
 
 

Решил использовать защиту от рекламы заменой url. Регулярное выражение взял из вашей книги "Самоучитель PHP5". $url = preg_replace("#^(http://)?[-a-z0-9_\.]+([-a-z0-9_]+\.(html|php|pl|cgi))?([-a-z0-9_:@&\?=+\.!/~*'%$]+)?$#i", "http://site.ru", $url); Всё прекрасно работает, но проблема в том, что если написать одно слово на латинице(например test), оно также будет заменено на http://site.ru. Скажите, пожалуйста, как этого избежать?

   
 
 автор: cheops   (16.09.2006 в 21:01)   письмо автору
 
   для: Guest11   (16.09.2006 в 19:26)
 

А test всмысле, т.е. регулярное выражение срабатывает на любое английкое слово в сообщении?

   
 
 автор: Guest11   (16.09.2006 в 21:15)   письмо автору
 
   для: cheops   (16.09.2006 в 21:01)
 

Да, любое английское слово оно заменяет на http://site.ru. Но если в сообщении будет 2 или больше слов, например test test или test Тест, Тогда всё нормально. Т.е. оно срабатывает, если в сообщении находится одно единственное слово и оно на латинице.

   
 
 автор: kasmanaft   (17.09.2006 в 14:21)   письмо автору
 
   для: Guest11   (16.09.2006 в 21:15)
 

А что должно делать это рег. выражение? По-моему оно писалось не для того, для чего вы хотите его использовать ...
test - подходить под выражение, по-этому и заменяется
test test - нет, потому что между словами стоит пробел (который в рег. выражении не разрешен). Если к слову test добавить еще, какой-нибудь не разрешенный символ (напр. test^), то замена также не произойдет

   
 
 автор: Guest11   (17.09.2006 в 18:40)   письмо автору
 
   для: kasmanaft   (17.09.2006 в 14:21)
 

Я знаю, что писалось оно не для этого, но т.к. сам я не в силах написать, решил воспользоваться этим. Это выражение проверяет правильность ввода url. Тогда подскажите, какое регулярное выражение надо использовать для замены любого url, начинающегося с http:// на http://site.ru .

   
 
 автор: kasmanaft   (18.09.2006 в 00:22)   письмо автору
 
   для: Guest11   (17.09.2006 в 18:40)
 

немного модернизировал, получилось так:

<?
$text 
'Вот мой супер сайт - http://super-site.org, зайдите обязательно.
И еще один тоже супер сайт super-site.com'
;
// $text = 'test';
// $text = 'test.info';
// $text = 'test.info/index.php?id=55';
$text preg_replace ("#(http://)?[-a-zA-Z0-9_\.]+\.[\w]{2,4}\/([-a-z0-9_]+\.(html|php|pl|cgi))?([-a-z0-9_:@&\?=+\.!/~*'%$]+)?#is"'http://site.ru'$text);
echo 
$text;
?>

   
 
 автор: Guest11   (18.09.2006 в 07:41)   письмо автору
 
   для: kasmanaft   (18.09.2006 в 00:22)
 

Что-то не работает, в смысле, не заменяет. Так и выводит: http://super-site.org Может быть, вы допустили небольшую ошибку?

   
 
 автор: kasmanaft   (18.09.2006 в 09:58)   письмо автору
 
   для: Guest11   (18.09.2006 в 07:41)
 

Да, в торопях не туда " \ / " вставил ... :(

***[\w]{2,4}(\/[-a-z0-9_]+\.(html|php|pl|cgi))*****

(оказывается все гораздо сложнее, чем я думал ... есть глюки в этом выражении ... сейчас нету времени, позже постараюсь улучшить, если сложным оно кажется не только мне и меня не опередят :) )

   
 
 автор: Guest11   (18.09.2006 в 10:46)   письмо автору
 
   для: kasmanaft   (18.09.2006 в 09:58)
 

Большое спасибо! Оно и так прекрасно работает.

   
Rambler's Top100
вверх

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