Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Заменить идущие подряд одинаковые символы таким же количеством других символов
 
 автор: yuk   (01.02.2008 в 09:28)   письмо автору
 
 

Возможно ли заменить идущие подряд одинаковые символы таким же количеством других символов? (если количество > 1)
Например "заменить__подчеркивание____на_тире" = "заменить--подчеркивание----на_тире" ?

   
 
 автор: Саня   (01.02.2008 в 11:40)   письмо автору
 
   для: yuk   (01.02.2008 в 09:28)
 

<?
$text 
"заменить__подчеркивание____на_тире";
$text str_replace("_""-"$text);
print 
$text// заменить--подчеркивание----на-тире

   
 
 автор: Freddie_X   (01.02.2008 в 13:57)   письмо автору
 
   для: Саня   (01.02.2008 в 11:40)
 

В этом случае скрипт будет заменять _ на -, даже если идёт 1 символ подряд. А нужно заменять, если 1+.

   
 
 автор: kasmanaft   (01.02.2008 в 19:03)   письмо автору
 
   для: yuk   (01.02.2008 в 09:28)
 

Пожалуй, preg_replace("/_(?=_)|(?<=_)_/", "-", $text); ...

   
 
 автор: Freddie_X   (01.02.2008 в 19:57)   письмо автору
 
   для: yuk   (01.02.2008 в 09:28)
 

Попробовал такой способ, вроде работает!
<?php
$text 
"заменить__подчеркивание____на_тире";
$text str_replace("__","--",$text);
$text str_replace("-_","--",$text);
echo 
$text;
?>

   
 
 автор: yuk   (01.02.2008 в 22:29)   письмо автору
 
   для: Freddie_X   (01.02.2008 в 19:57)
 

Спасибо kasmanaft, спасибо Freddie_X, оба варианта работают. Правда, в случае с str_replace если в исходном тексте встретится конструкция -_ то она будет преобразована в --, хотя по условию должна такой и остаться. Но меня такой вариант устраивает.

И, к слову, хотелось бы разобраться с выражением
preg_replace("/_(?=_)|(?<=_)_/", "-", $text);
а то пытался сделать нечто подомное сам, но ничего не вышло.
Как я понял, (?=_) значит, что следующий символ _, а (?<=_) что предыдущий был _. Я правильно понял?

   
 
 автор: kasmanaft   (02.02.2008 в 07:51)   письмо автору
 
   для: yuk   (01.02.2008 в 22:29)
 

Да, всё верно.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования