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

Тема в разделе "PHP", создана пользователем mc-alkin, 20 июл 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. mc-alkin

    mc-alkin

    Регистр.:
    17 июл 2009
    Сообщения:
    164
    Симпатии:
    100
    Подскажите регулярку, которая заменяет 2 и более пробелов подряд на 1 пробел.
    И 2 и более точки на 1 точку. Тоже подряд.
     
  2. awx

    awx Создатель

    Регистр.:
    7 апр 2009
    Сообщения:
    43
    Симпатии:
    4
    PHP:
    "/\s(\s)*/"" "
    для точек аналогично
     
    mc-alkin и irk нравится это.
  3. gres_18

    gres_18 Pythonобандерівець®

    Регистр.:
    26 апр 2009
    Сообщения:
    407
    Симпатии:
    206
    Изящнее будет так:
    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;
    ?>
    точки.
    Кстати вот это
    не верно. Потому что будет менять и одиночный пробел - глазу не заметно, а сервер нагружает ненужной работой. Вот если заменить * на +, тогда покатит.
     
    merdoc и mc-alkin нравится это.
  4. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    737
    Симпатии:
    263
    Иллюстрация:
    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)*/");
    Генерим одну и ту же строку, заменяем в ней одни и те же пробелы, но используем для этого разные паттерны. Замеряем время.
     
Статус темы:
Закрыта.