|
|
|
| Как мне в слове сократить все повторения одинаковых символов до трех символов?
Допустим я сумею при помощи substr обрезать, но как их отыскать? Три и более одинаковых подряд? | |
|
|
|
|
|
|
|
для: bronenos
(18.03.2007 в 10:37)
| | а поконкретнее можно на примере, если я правильно понял то можно так
preg_match_all("#[ искомый символ]#is",$str,$arr)
if(count($arr[0])>3){
делаешь что надо
}
если неправильно то давай пример конкретный | |
|
|
|
|
|
|
|
для: вит
(19.03.2007 в 16:36)
| | Сократить все повторения символов до трех максимум
Пример:
Всем привееееееееет!!!!! =))))))
заменить в итоге на
Всем привееет!!! =))) | |
|
|
|
|
|
|
|
для: bronenos
(19.03.2007 в 17:01)
| | | |
|
|
|
|
|
|
|
для: SHAman
(19.03.2007 в 18:18)
| | Не понял... это js чтоли? Можно Ваш (шаман) код в готовом виде?
Я просто не знаю чтоб можно было
/шаблон/что тут у вас/модификаторы
и как этим пользоваться... | |
|
|
|
|
|
|
|
для: bronenos
(19.03.2007 в 22:46)
| |
<?
$str = "Всем привееееееет!!!! ===)))))))))";
echo preg_replace("/(.)\\1{3,}/", "\${1}\${1}\${1}", "$str");
?>
|
То, что я написал - это Perl-регулярка. Просто я знал как решить задачку, но не хотел рыскать по функциям работы с рег выражениями в пхп. Думал поможет. Вот этот код - работает.
В шаблоне, мы ловим любой символ и запоминаем в переменную $1 Затем, мы смотрим, чтобы этот символ повторялся еще три или более раза подряд
В подстановке, мы просто заменяем всю эту фиговину, что нашли на три подрядидущих символа при помощи переменной \${1}.
Вот и все. Учите регэкспы - не велика наука, а польза налицо. Посмотрите код, который ниже - ведь это ужасно выглядит и неэффективно. Регулярки - это сила. Хорошо, что хоть некое подобие от них осталось в php. | |
|
|
|
|
|
|
|
для: 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;
?>
|
| |
|
|
|
|
|
|
|
для: вит
(21.03.2007 в 14:56)
| | Это не наш метод :) Регулярными выражениями эта задача решается в одну строку, а в твоем случае, у тебя куча ненужного кода. Кроме того, вся эта конструкция будет работать значительно медленнее одной регулярки (я надеюсь, что в php это так, потому что в Perl это точно так.). | |
|
|
|