Вопрос по php, string – удаление повторяющихся символов рядом друг с другом

14

im пытается удалить дубликаты символов, которые находятся рядом друг с другом

1,2,3,4,5 - имеет несколько запятых, но они не должны быть удалены 1, 2, 3, 4, 5 - должны быть превращены в обычные 1,2,3, 4,5 независимо от того, сколько запятых находится между каждым числом, я хотел бы иметь только одну. у меня есть что-то похожее, что гарантирует отсутствие запятых в конце строки:

<code>$n = "1,2,3,4,5";
for ($i=0;$i< strlen($n);$i++) {

    if (substr($n, -1) == ',') {
        $n = substr($n, 0, -1);
    }
}
</code>

был бы признателен за помощь в этом вопросе,

Благодарность :

Каков твой вопрос? Если есть лучший способ? simshaun

Ваш Ответ

2   ответа
34

что вы хотите делать это только через запятую, так что это очень легко сделать с Preg_replace:

$n = '1,2,,3,,,,,4,5';
$n = preg_replace('/,+/', ',', $n);     // $n == '1,2,3,4,5'

Также вы можете заменить приведенный выше код, который гарантирует отсутствие запятых в конце строки на RTRIM. Это будет быстрее и проще для чтения:

$n = '1,2,3,4,5,,,,,'
rtrim($n, ',');                         // $n == '1,2,3,4,5'

Вы можете объединить их обоих в одну строку:

$n = preg_replace('/,+/', ',', rtrim($n, ','));
о, спасибо за редактирование с дополнительной информацией, rtrim почти сделал то, что я уже имел в конце. в конце каждая запятая, кроме одной. поэтому я просто использовал if (substr ($ n, -1) == ',') {$ n = substr ($ n, 0, -1); чтобы получить этот последний. еще раз спасибо :)} Steve
Это помогло. Я не совсем уверен, как я мог использовать регулярные выражения в php. теперь я знаю: D спасибо. Steve
@ Стив Нет проблем! Есть несколько различных функций для использования регулярных выражений в PHP. Php.net / ручной / EN / ref.pcre.php Paulpro
@ Steve Не за что.rtrim($n, ',') должен убрать каждую запятую с конца. Paulpro
12
$n = '1,2,,3,,,,,4,5';
$n = preg_replace('/(.)\\1+/', '$1', $n);

долже работать для любых повторяющихся символов, следующих друг за другом.

Тем не менее, маловероятно, что спрашивающий хочет заменитьлюбо символьные повторения таким образом (включая числа вроде 44 => 4). Скорее всего, что-то вроде этого предназначено:

$n = preg_replace('/([,.;])\\1+/', '$1', $n); # replace repetitions of ,.:
$n = preg_replace('/([^\d])\\1+/', '$1', $n); # replace repetitions of non-digit characters
Хотя, возможно, это было не то, что он хотел, это то, что он просил в своем вопросе, так что + 1. Mr Wednesday
Это также удалит повторяющиеся числа, и моя причина проблемы.'1,2,,3,,,,,44,55'; будет1,2,3,4,5 Jafar rezaei
Как прокомментировал @MrWednesday, я ответил на вопрос в том виде, в котором его спросили, даже если очень маловероятно, что спрашивающий хотел получить то, что он спросил :) Однако ваше замечание вполне реалистично, и я исправлю ответ. Irfy

Похожие вопросы