Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > ereg_replace


Автор: burakov 15.9.2009, 10:36
Добрый день 

Задача 
из строки нужно удалить лишнее пробелы, а затем оставшиеся заменить на подчеркивание

Проблема
Чего то не работает как надо функция ereg_replace

Пример:
Пишу регулярку как в перле

Код

$str = ereg_replace ("\s+", "_", $str); 


Вопрос
Почему ereg_replace не понимает мой шаблон "\s+" (один и более пробелов)?????

Спасибо.

Автор: Ипатьев 15.9.2009, 10:53
может быть в ereg нет вообще такого символьного класса?

Автор: brother79 15.9.2009, 10:54
Я вот глянул хелп по этой ф-ии, там есть следующее:

Warning

This function has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 6.0.0. Relying on this feature is highly discouraged.

На preg_replace это должно быть так:

    
$str = preg_replace ('/\s+/', "_", $str); 

В твоём случае должно работать так:

$str = ereg_replace ('\s+', "_", $str); 

или так:

$str = ereg_replace ("\\s+", "_", $str); 

Автор: burakov 15.9.2009, 10:55
Спасибо сейчас попробую!!!

Добавлено через 13 минут и 42 секунды
получилось с preg_replace
Спасибо.

Автор: Pfailed 16.9.2009, 09:10
В ereg_replace() используются POSIX совместимые регулярные выражения, которые отличаются от perl совместимых.
То что вы хотите тут делаетсят так:
Код

ereg_replace("[[:space:]]", "", "1 2 3 4 5");


Автор: Strilo4ka 22.9.2009, 18:33
preg работают в стиле PERL и они мочнее

Добавлено через 4 минуты и 44 секунды
preg_match(), which uses a Perl-compatible regular expression syntax, is often a faster alternative to ereg(). 

и всегда надо ставить начало и конец регулярного выражения каким то символовом (не путать с началом и концом данных в регулярном выражении 
Код
^ $
 )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)