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

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

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

 

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

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

тема: заменить ссылки
 
 автор: Штеукуы   (31.07.2007 в 17:52)   письмо автору
 
 

Нужно заменить url, на знак вопроса. Проблема в том что привязатся почти не к чему. Url может быть любым...

http://поддомен.домен.доменная зона/папка/?параметры
www.поддомен.домен.доменная зона/папка/?параметры
поддомен.домен.доменная зона/папка/?параметры

Можно ли это сделать рег выражениями?

interes

   
 
 автор: ddhvvn   (31.07.2007 в 18:08)   письмо автору
 
   для: Штеукуы   (31.07.2007 в 17:52)
 

Сейчас что-то голова плохо варит, написал, попробуйте это:

preg_replace("|http://(www\.)?([a-z_-0-9]+\.)+(/.*/)*(\?.*)?|is","\?",$str);

   
 
 автор: Штеукуы   (31.07.2007 в 19:32)   письмо автору
 
   для: Штеукуы   (31.07.2007 в 17:52)
 

Не то :(


<?

$str 
= array(
'текст  http://softtime.ru/forum/read.php?id_forum=6&id_theme=41336&page=1 и тут немного',
'текста softtime.ru/forum/read.php?id_forum=6&id_theme=41336&page=1 везде понемногу',
'немножко на последок www.softtime.ru/forum/read.php',
'softtime.ru тут почти нет',
'a tut ssilok net');

foreach(
$str as $value)
    echo 
preg_replace("|http://(www\.)?([a-z_-0-9]+\.)+(/.*/)*(\?.*)?|is","\?"$value)."<br>";
?>

   
 
 автор: ddhvvn   (31.07.2007 в 20:01)   письмо автору
 
   для: Штеукуы   (31.07.2007 в 19:32)
 

Я могу предложить вариант только для ссылок, начинающихся на http:


<?
 
echo preg_replace("|(.*)http(s)?://.*\s(.*)|isU","\\1?\\3"$str);
?> 

   
 
 автор: Штеукуы   (01.08.2007 в 14:59)   письмо автору
 
   для: ddhvvn   (31.07.2007 в 20:01)
 

Спасибо, но он не справится с такой строкой :(

<? 
$str 
'тут текст, а потом просто ссылка, пробела в коце нет http://softtime.ru/forum/answer.php?id_forum=6&id_theme=41336&id_post=237346';

 echo 
preg_replace("|(.*)http(s)?://.*\s(.*)|isU","\\1?\\3"$str); 
?>

   
 
 автор: Штеукуы   (01.08.2007 в 16:13)   письмо автору
 
   для: ddhvvn   (31.07.2007 в 20:01)
 

Вот что у меня есть не регулярными ;) Может всетаки это можно сделать в пару строк?

<?

$domenZone 
= array(
    
'.ru',
    
'.com',
    
'.net',
    
'.ua',
    
'.info'
);

$str 'www.softtime.info/ ку ку mumu.ru asdasd http://softtime.ru/forum/read.php?id_forum=6&id_theme=41336&page=1 dasdas';

$foundet substr_count_array$str$domenZone );

$str replaceUrl($str$foundet'?');

echo 
$str;

function 
substr_count_array$haystack$needle ) {
     
$foundet false;
     foreach (
$needle as $substring)
     {
         
$countNeedle substr_count$haystack$substring);
         if (
$countNeedle 0)
         {
          
$foundet[] = array(
          
'urlZone' => $substring,
          
'count' => $countNeedle);
         }
     }
     return 
$foundet;
}

function 
replaceUrl($str$foundet$replacement)
{
    if (!
is_array($foundet))
        return 
false;

foreach (
$foundet AS $value)
{
    for (
$i =0$i$value['count']; $i++)
    {
        
$posFoundet strpos($str$value['urlZone']);
        
$posEnd strpos($str' '$posFoundet);
    
        
$posEnd = ($posEnd)?($posEnd):(strlen($str));

        
$posStart strlen($str) - strpos(strrev($str), ' 'strlen($str)-$posFoundet);
    
        
$posStart = ($posStart strlen($str))?($posStart):(0);
    
        
$url substr($str$posStart$posEnd-$posStart);
    
        
$str str_replace($url$replacement$str);
    }
}

return 
$str;

}


?>


interes

   
 
 автор: kasmanaft   (01.08.2007 в 19:12)   письмо автору
 
   для: Штеукуы   (01.08.2007 в 16:13)
 

В коде не разбирался, но вот вроде что-то похожее:

<?php
$str 
'.........';
echo 
preg_replace("#(http://)?([a-z0-9-.]+\.)+(com|ru|net|ogr|ua|info)(/\S*)?#is""?"$str);

   
Rambler's Top100
вверх

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