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

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

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

 

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

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

тема: Помогите переделать регулярное выражение
 
 автор: Z3RO   (05.02.2012 в 13:57)   письмо автору
 
 

Здравствуйте. Как мне переделать это выражение:

$str = ereg_replace("http://(([A-Za-z0-9.=%&;#-_]+(\/)?(\?)?)*)", "<a href=\"\\0\">\\0</a>", $str);


Таким образом, чтобы, к примеру, в строке "http://site.ru." последняя точка не считалась частью ссылки.

  Ответить  
 
 автор: ladan   (05.02.2012 в 16:08)   письмо автору
 
   для: Z3RO   (05.02.2012 в 13:57)
 

пойдет? :)


<?
$str 
"http://site.ru...";

echo 
preg_replace("/^(http:\/\/[a-z0-9\.\-]+(ru|org|com)).*$/i""<a href='\\1'>\\1</a>"$str);

?>

  Ответить  
 
 автор: Z3RO   (05.02.2012 в 20:15)   письмо автору
 
   для: ladan   (05.02.2012 в 16:08)
 

Нет, нужно чтобы все доменные зоны проходили и данное выражение адреса с поддоменами не будет видеть.

  Ответить  
 
 автор: ladan   (05.02.2012 в 21:19)   письмо автору
 
   для: Z3RO   (05.02.2012 в 20:15)
 

preg_replace("/(http:\/\/[a-z0-9\.\-]+\.[a-z]{2,3}).*/i", "<a href='\\1'>\\1</a>", "http://blog.mokoron.com");

  Ответить  
 
 автор: Sfinks   (05.02.2012 в 23:45)   письмо автору
 
   для: Z3RO   (05.02.2012 в 13:57)
 

Для начала скажите, какого вида ссылки могут быть?
Только "http://site.ru.", или и "http://site.ru/." и "http://site.ru./" и "http://site.ru/index.php." и так далее. И из какого места убирать точку, из домена, из пути, из файла, из любого места, где ее не должно быть или просто из конца любой ссылки?
Просто по вашему выражению не понятно, что переделывать. Оно пропустит любую белиберду начиная от просто http:// и заканчивая http://......'-\|/-'.....%%=#=.

  Ответить  
 
 автор: Z3RO   (06.02.2012 в 00:35)   письмо автору
 
   для: Sfinks   (05.02.2012 в 23:45)
 

Не совсем любую. Вобщем нужно выражение, которое будет правильно превращать ЮРЛ в тексте на ссылки.

  Ответить  
 
 автор: Sfinks   (06.02.2012 в 04:04)   письмо автору
 
   для: Z3RO   (06.02.2012 в 00:35)
 

Общий вид такой:
<?
  $pattern 
"#http://([а-яёa-z\d][а-яёa-z\d\-]*\.)+[а-яёa-z]{2,6}(/([а-яё\w\-\.]*[а-яё\w\-/]{1})*(\?(([a-z][\w\-]*)?(=(%[a-z\d]{2}|[\w\-\.\+])*)?)?(&(amp;)?(([a-z][\w\-]*)?(=(%[a-z\d]{2}|[\w\-\.\+])*)?)?)*)?)?#ui";
  
$url preg_replace($pattern,"<a href=\"$0\">",$url);
Это в предположении что у вас используется UTF-8. Если нет, нужно в конце перед i убрать модификатор u.

Дальше пример, какие урлы понимает это выражение:
<?
  header
("content-type: text/plain; charset=utf-8");
  
$urls = array( "http://site.ru.",
                 
"http://site.ru.com",
                 
"http://site.ru.com/",
                 
"http://сайт.ru.com/dir/",
                 
"http://site.ru.com/dir/file.php",
                 
"http://site.рф.com/dir/lbh/file.php?a",
                 
"http://site.ru.com/dir/file.php?a=r5%2F",
                 
"http://site.ru.ком/dir/file.php?a=r5%2F&",
                 
"http://site.ru.com/dir/file.php?a=r5%2F&b=12",
                 
"http://site.ru.com/дир/file.php?a=r5%2F&amp;b=12&amp;c=" );
  
$max_len mb_strlen($urls[9],"utf-8");
  
$pattern "#http://([а-яёa-z\d][а-яёa-z\d\-]*\.)+[а-яёa-z]{2,6}(/([а-яё\w\-\.]*[а-яё\w\-/]{1})*(\?(([a-z][\w\-]*)?(=(%[a-z\d]{2}|[\w\-\.\+])*)?)?(&(amp;)?(([a-z][\w\-]*)?(=(%[a-z\d]{2}|[\w\-\.\+])*)?)?)*)?)?#ui";
  foreach(
$urls as $url)
    echo 
$url.str_repeat(" ",$max_len-mb_strlen($url,"utf-8")).
         
" => ".preg_replace($pattern,"<a href=\"$0\">",$url)."\n";
результат:
http://site.ru.                                         => <a href="http://site.ru">.
http://site.ru.com                                      => <a href="http://site.ru.com">
http://site.ru.com/                                     => <a href="http://site.ru.com/">
http://сайт.ru.com/dir/                                 => <a href="http://сайт.ru.com/dir/">
http://site.ru.com/dir/file.php                         => <a href="http://site.ru.com/dir/file.php">
http://site.рф.com/dir/lbh/file.php?a                   => <a href="http://site.рф.com/dir/lbh/file.php?a">
http://site.ru.com/dir/file.php?a=r5%2F                 => <a href="http://site.ru.com/dir/file.php?a=r5%2F">
http://site.ru.ком/dir/file.php?a=r5%2F&                => <a href="http://site.ru.ком/dir/file.php?a=r5%2F&">
http://site.ru.com/dir/file.php?a=r5%2F&b=12            => <a href="http://site.ru.com/dir/file.php?a=r5%2F&b=12">
http://site.ru.com/дир/file.php?a=r5%2F&amp;b=12&amp;c= => <a href="http://site.ru.com/дир/file.php?a=r5%2F&amp;b=12&amp;c=">

  Ответить  
 
 автор: Z3RO   (11.02.2012 в 17:27)   письмо автору
 
   для: Sfinks   (06.02.2012 в 04:04)
 

Спасибо. То, что нужно. =)

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

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