Вопрос по preg_replace

CyberX
На сайте с 08.03.2008
Offline
51
723

Произвожу замену в тексте (во всех числовых данных) запятых на точки.

$new = preg_replace('/(\d),(\d)/i', '$1.$2', $old);

Замену производит корректно, но вот увидел что в тексте попадаются словоформы типа "П\К" и после прогона кода замены запятых количество "\" увеличивается в двое "П\\К".

Если взять строку "П\\\\К", то получатеся на выходе "П\\\\\\\\К".

В чем мой косяк, и как это поправить ?

Шустрый хостинг (http://www.colocat.ru) за нормальные деньги (Москва). 30 дней тестовый период. Рекомендую копирайтера aronskaya (/ru/users/73753). Отличные авторские тексты.
malls
На сайте с 08.08.2005
Offline
255
#1

Думаю надо погуглить "Модификаторы патэрна", а затем просто выучить их. ...Хотя я до сих пор не могу :)

Там чего то вроде U или X надо добавить в шаблон (лень искать)... В дополнение к i, хотя в случае с цифрами i как раз и не нужна совсем...

dvaes
На сайте с 03.09.2007
Offline
65
#2
malls:
Думаю надо погуглить "Модификаторы патэрна", а затем просто выучить их. ...Хотя я до сих пор не могу
Там чего то вроде U или X надо добавить в шаблон (лень искать)... В дополнение к i, хотя в случае с цифрами i как раз и не нужна совсем...

может X поможет

а вы уверены, что именно из-за preg_replace?

данные еще на входе могут так делаться из-за чего-нибудь

N
На сайте с 06.05.2007
Offline
419
#3

Во-первых цикл не нужен, достаточно модификатора /gs

Во-вторых, кто вам сказал что это именно preg_replace так портит данные? Напоминает обычное экранирование слешей в php.

Кнопка вызова админа ()
CyberX
На сайте с 08.03.2008
Offline
51
#4
netwind:
Напоминает обычное экранирование слешей в php.

Вы правы, действительно обычное экранирование слешей.

$old=stripslashes($old);

Помогло решить проблему.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий