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

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

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

 

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

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

тема: Урезать слово
 
 автор: bronenos   (18.03.2007 в 10:37)   письмо автору
 
 

Как мне в слове сократить все повторения одинаковых символов до трех символов?
Допустим я сумею при помощи substr обрезать, но как их отыскать? Три и более одинаковых подряд?

   
 
 автор: вит   (19.03.2007 в 16:36)   письмо автору
 
   для: bronenos   (18.03.2007 в 10:37)
 

а поконкретнее можно на примере, если я правильно понял то можно так
preg_match_all("#[ искомый символ]#is",$str,$arr)
if(count($arr[0])>3){

делаешь что надо

}
если неправильно то давай пример конкретный

   
 
 автор: bronenos   (19.03.2007 в 17:01)   письмо автору
 
   для: вит   (19.03.2007 в 16:36)
 

Сократить все повторения символов до трех максимум
Пример:
Всем привееееееееет!!!!! =))))))
заменить в итоге на
Всем привееет!!! =)))

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


/(.)\1{3,}/$1$1$1/g;

   
 
 автор: bronenos   (19.03.2007 в 22:46)   письмо автору
 
   для: SHAman   (19.03.2007 в 18:18)
 

Не понял... это js чтоли? Можно Ваш (шаман) код в готовом виде?
Я просто не знаю чтоб можно было
/шаблон/что тут у вас/модификаторы
и как этим пользоваться...

   
 
 автор: SHAman   (22.03.2007 в 12:21)   письмо автору
 
   для: bronenos   (19.03.2007 в 22:46)
 


<?
$str 
"Всем привееееееет!!!! ===)))))))))";

echo 
preg_replace("/(.)\\1{3,}/",     "\${1}\${1}\${1}",     "$str");
?>

То, что я написал - это Perl-регулярка. Просто я знал как решить задачку, но не хотел рыскать по функциям работы с рег выражениями в пхп. Думал поможет. Вот этот код - работает.

В шаблоне, мы ловим любой символ и запоминаем в переменную $1
(.)
Затем, мы смотрим, чтобы этот символ повторялся еще три или более раза подряд
\\1{3,}


В подстановке, мы просто заменяем всю эту фиговину, что нашли на три подрядидущих символа при помощи переменной \${1}.

Вот и все. Учите регэкспы - не велика наука, а польза налицо. Посмотрите код, который ниже - ведь это ужасно выглядит и неэффективно. Регулярки - это сила. Хорошо, что хоть некое подобие от них осталось в php.

   
 
 автор: вит   (21.03.2007 в 14:56)   письмо автору
 
   для: bronenos   (19.03.2007 в 17:01)
 

держи код

<?php
$str
="Всем привееееееееет!!!!! =))))))";
$arr=str_split($str);
//print_r($arr);
$cnt=0;
foreach (
$arr as $key=>$val){
    if ((
$arr[$key]==$arr[$key+1])&&($arr[$key]==$arr[$key+2])){
        
$k=3;
        while (
$val==$arr[$key+$k]){
            
$arr[$key+$k]="";
            
$k++;
        }
    }
}
//print_r($arr);
$st=implode("",$arr);
echo 
$st;
?>

   
 
 автор: SHAman   (22.03.2007 в 12:06)   письмо автору
 
   для: вит   (21.03.2007 в 14:56)
 

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

   
Rambler's Top100
вверх

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