Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> preg_replace небольшйо нюанс 
:(
    Опции темы
Frozen_Coyote
Дата 9.12.2008, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 20.9.2007

Репутация: нет
Всего: нет



Здравствуйте,

небольшая помощь требуется

задача:
из строки вида t1+pt1+zzt23+t45 сделать строку вида 0+pt1+zzt23+0, т.е. заменить в ней комбинацию t{любой-набор-цифр} на НОЛЬ, но при условии что t - первая после знака +, если она идет после любого другого символа - оставлять фрагмент без изменений.

Регулярку я составил, отрабатывает без проблем но натолкнулся на следующую штучку

выражение

Код

$s = "t1+pt1+zzt23+t45";
echo preg_replace("/(^t\d*)|(([^a-z])t\d*)/","$3 0",$s);


выводит все как бы правильно (0+pt1+zzt23+ 0 ), но видите - приходится писать $3 пробел 0, и на выходе между последним + и 0 лепится пробел. Если же пробел в теле параметра не ставить то получается $30, а это неправильно. Подскажите, как избавиться от пробела этого на выходе? Как правильно сформировать параметр этот?

спасибо
PM MAIL   Вверх
unicross
Дата 9.12.2008, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 422
Регистрация: 15.6.2008

Репутация: 5
Всего: 53



Код

<?php
$s = "t1+pt1+zzt23+t45";
echo preg_replace('#(?<=^|[+])t\d+#si', '0', $s);
?>

или так
Код

<?php
$s = "t1+pt1+zzt23+t45";
echo preg_replace("/(^t\d*)|(([^a-z])t\d*)/","\${3}0",$s);
?>


Это сообщение отредактировал(а) unicross - 9.12.2008, 18:21
PM MAIL WWW   Вверх
Frozen_Coyote
Дата 9.12.2008, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 20.9.2007

Репутация: нет
Всего: нет



спасибо, хорошее решение
PM MAIL   Вверх
amg
Дата 10.12.2008, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 1
Всего: 50



Код
preg_replace("/\bt\d*\b/", 0, $s);

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0400 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.