Регулярка. 2 и более пробелов

Статус
В этой теме нельзя размещать новые ответы.

mc-alkin

Постоялец
Регистрация
17 Июл 2009
Сообщения
161
Реакции
100
Подскажите регулярку, которая заменяет 2 и более пробелов подряд на 1 пробел.
И 2 и более точки на 1 точку. Тоже подряд.
 
Изящнее будет так:
PHP:
'<?php
$text = 'g  g   h g g   5';
$res = preg_replace("#\s{2,}#", ' ', $text);
echo $res;
?>
пробелы
PHP:
<?php
$text = 'g..g...h.g.g....5';
$res = preg_replace("#\.{2,}#", '.', $text);
echo $res;
?>
точки.
Кстати вот это
PHP:
"/\s(\s)*/", " "
для точек аналогично
не верно. Потому что будет менять и одиночный пробел - глазу не заметно, а сервер нагружает ненужной работой. Вот если заменить * на +, тогда покатит.
 
Кстати вот это не верно. Потому что будет менять и одиночный пробел - глазу не заметно, а сервер нагружает ненужной работой. Вот если заменить * на +, тогда покатит.
Иллюстрация:
PHP:
function check($pattern) {
   $time = microtime();
   for($i=0; $i<1000;$i++) {
      $str = str_repeat('  -',1000);
      $str = preg_replace($pattern, ' ', $str);
   }
   $arr = explode(' ',$time.' '.microtime()); 
   echo sprintf("%03.8f\n",($arr[2]+$arr[3])-($arr[0]+$arr[1])); 
}
check("#\s{2,}#");
check("#\s+#");
check("#\s*#");
check("/\s(\s)*/");
Генерим одну и ту же строку, заменяем в ней одни и те же пробелы, но используем для этого разные паттерны. Замеряем время.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху