Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Одна строковая функция / 11 сообщений из 11, страница 1 из 1
01.10.2012, 19:03:52
    #37979217
urukhay
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна строковая функция
Привет.

Есть задача: нужно в заданной строке все идущие подряд одинаковые символы (пусть, например, символы девиса) заменить на одиночные.
Т.е.:

"as--df" => "as-df"
"as---" => "as-df"
...
"as---------------" => "as-df"

Скажите, есть ли в стандарте пхп функция, которая решит подобную задачу? str_replace и strtr не помогают, а мне, помнится, что я читал про подобного рада функцию.

Заранее спасибо!
...
Рейтинг: 0 / 0
01.10.2012, 19:11:02
    #37979227
urukhay
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна строковая функция
Простите, очипятка.

"as--df" => "as-df"
"as---df" => "as-df"
...
"as---------------df" => "as-df"

Вот теперь правильно
...
Рейтинг: 0 / 0
01.10.2012, 19:20:22
    #37979241
phpz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна строковая функция
urukhay,

тынц ?!
...
Рейтинг: 0 / 0
01.10.2012, 19:28:55
    #37979251
urukhay
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна строковая функция
Спасибо.
А без использования регулярки никак решить нельзя?
...
Рейтинг: 0 / 0
01.10.2012, 20:10:16
    #37979279
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна строковая функция
urukhayА без использования регулярки никак решить нельзя?Через str_replace прогнать несколько раз, пока двойных символов не останется?
...
Рейтинг: 0 / 0
01.10.2012, 20:26:53
    #37979292
urukhay
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна строковая функция
Ну можно конечно, только неизвестно, сколько раз прогонять, т.к. число повторений может быть бесконечным!
...
Рейтинг: 0 / 0
01.10.2012, 20:27:45
    #37979294
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна строковая функция
urukhayнеизвестно, сколько раз прогонять
vkleпока двойных символов не останется
...
Рейтинг: 0 / 0
02.10.2012, 05:38:59
    #37979491
r u
r u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна строковая функция
urukhay,

можно и в один проход, но не факт что это будет быстрее регулярки
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
function strip_repeat($str) {
    $prev=null;
    $out = '';
    for($i=0,$m=strlen($str); $i<$m; ++$i) {
        if ($prev!=$str{$i})
            $out .= $str{$i};
        $prev = $str{$i};
    }
}
...
Рейтинг: 0 / 0
02.10.2012, 10:12:46
    #37979658
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна строковая функция
urukhay,

Код: php
1.
2.
3.
4.
5.
6.
$in = array("as--df", "as---df---eg", "as---------------df");

foreach ($in as $v) {
	print_r(preg_split('/[-]+/', $v));
	echo PHP_EOL;
}


Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Array
(
    [0] => as
    [1] => df
)

Array
(
    [0] => as
    [1] => df
    [2] => eg
)

Array
(
    [0] => as
    [1] => df
)
...
Рейтинг: 0 / 0
02.10.2012, 11:02:53
    #37979740
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна строковая функция
Ну, и конечно же собрать фрагменты вместе:
Код: php
1.
2.
3.
4.
$in = array("as--df", "as---df---eg", "as---------------df");

foreach ($in as $v)
	echo implode("-", preg_split('/[-]+/', $v)) . PHP_EOL;
...
Рейтинг: 0 / 0
02.10.2012, 11:11:55
    #37979756
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна строковая функция
Код: php
1.
echo preg_replace('/[-]+/', '-', $v), PHP_EOL; // тот же паттерн - этот вариант предпочтительнее (от phpz)
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Одна строковая функция / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]