Помогите с заменой в регуляном выражении

golos81

Новичок
Помогите с заменой в регуляном выражении

Надо все ситуации, когда символ нижнего подчеркивания '_' встречается подряд больше двух раз заменить на один раз.

Пишу выражение

ereg_replace("/[_]{2,}/", "_", $item);

Строка почему-то не меняется. Что не так?
 

zerkms

TDD infected
Команда форума
Армян
покажи решение? :)

golos81
PHP:
$string = "a_b__c___d__e____";
var_dump(preg_replace('/_{3,}/', '_', $string));
 

Армян

Новичок
zerkms
да запросто. Надеюсь фан не забанит меня =)

PHP:
while ( strpos($string, "__") !== false ) {
  $string = str_replace("__", "_", $string);
}
 

zerkms

TDD infected
Команда форума
Армян
когда символ нижнего подчеркивания '_' встречается подряд больше двух раз заменить на один раз.
т.е. __ не должно меняться, а ___ должно меняться на _ :)
так что $string = str_replace("___", "_", $string); и strpos для ___

ps: ну или ТС неверно мысль сформулировал :)
 

Армян

Новичок
zerkms, я больше смотрел на его регулярку, по ней я так понял ему надо два и более идущих подряд знака "_" заменить на один :)

А если как написано то да, регой надо =)

-~{}~ 30.04.09 11:45:

так что $string = str_replace("___", "_", $string); и strpos для ___
не проканает =)
 

zerkms

TDD infected
Команда форума
Армян
кстати да :)
так что в том виде, в котором вопрос написан - со строками решение будет сильно сложнее.
 

Gorynych

Посетитель PHP-Клуба
golos81 используйте не ereg_replace, а preg_replace

PHP:
$pattern = sprintf("_{%d,}", 3); // определитесь тут: БОЛЬШЕ ДВУХ раз подрят (3 и более раз), ИЛИ ДВА И БОЛЬШЕ

$str =<<<EOF
Помогите с заменой в регуляном выражении

Надо все ситуации, когда символ нижнего подчеркивания '_' встречается подряд больше двух раз заменить на один раз.

Пишу выражение

Строка почему-то не меняется. Что не так?
New Post 30.04.09 08:25         URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ

Сделай без регулярок
New Post 30.04.09 08:33         URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТ

покажи решение? :-)

$string = "a_b__c___d__e____";
var_dump(preg_replace('/_{3,}/', '_', $string));
EOF;

echo preg_replace("/".$pattern."/", "_", $str);
echo "\n";
exit;
 
Сверху