Убрать дублирующиеся символы

Тема в разделе "Регулярные выражения", создана пользователем Raccoon, 4 ноя 2009.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. Raccoon

    Raccoon

    Регистр.:
    31 июл 2007
    Сообщения:
    172
    Симпатии:
    9
    Всем добрый день!

    Вопрос такой:

    есть функция конвертации русского заголовка в транслит для URL:

    function str2url($str) {
    // Обрезаем строку
    $str = substr($str, 0, 24);
    // переводим в транслит
    $str = rus2translit($str);
    // в нижний регистр
    $str = strtolower($str);
    // заменям все ненужное нам на "-"
    $str = preg_replace('~[^-a-z0-9_]+~u', '-', $str);
    // удаляем начальные и конечные '-'
    $str = trim($str, "-");

    return $str;
    }

    Но есть один вопрос, если например входящая строка будет такого вида: "Первая новость - добрый день!", то функция генерит лишние дефисы:
    pervaya-novost---dobriy-den

    Как убрать дублирующиеся дефисы?
     
  2. nittis

    nittis Постоялец

    Регистр.:
    21 апр 2009
    Сообщения:
    68
    Симпатии:
    29
    $str = preg_replace('#-{2,}#', '-', $str);
     
    Raccoon нравится это.
  3. adrock

    adrock Создатель

    Регистр.:
    3 фев 2009
    Сообщения:
    20
    Симпатии:
    0
    Так имхо красивее
    PHP:
    echo  $str preg_replace("/-+/"'-'$dtr); 
     
  4. nittis

    nittis Постоялец

    Регистр.:
    21 апр 2009
    Сообщения:
    68
    Симпатии:
    29
    оно может и красивее, только много ненужных замен делает меняя, вхождения одиночного минуса на него же самого

    тогда уж так

    PHP:
    echo  $str preg_replace("/--+/"'-'$str);  
    но мой вариант мне кажется более понятным. и я предпочитаю ясность красоте.
     
Статус темы:
Закрыта.