im new для регулярных выражений в php.
У меня есть некоторые данные, в которых некоторые значения хранятся как ноль (0). Что я хочу сделать, это заменить их на "-". Я не знаю, какое значение получится равным нулю, так как моя таблица базы данных обновляется ежедневно, поэтому мне нужно разместить эту замену на всех данных.
$r_val=preg_replace('/(0)/','-',$r_val);
Использование кода im заменяет все нули, которые он находит, например. он даже заменяет ноль от 104.67, выдавая результат 1-4.56, который является неправильным. Мне нужны эти данные, где значение равно нулю, которое должно быть заменено на "-" не каждый нуль, с которым он сталкивается. Кто-нибудь может помочь!
Пример значений, которые имеет значение $r_val: -
10,31, 391,05, 113393, 15,31, 1000 и т.д.
Это зависит от того, как ваши данные отформатированы внутри $r_val
, но хорошим местом для начала было бы попробовать:
$r_val = preg_replace('/(?<!\.)\b0\b(?!\.)/', '-', $r_val);
Где \b
- это символ длины 0, представляющий начало или конец слова.
Как это ни странно, но документация Perl regex действительно хороша для объяснения регулярной части функций preg_*
поскольку Perl - это то, где функциональность фактически реализована.
В то время как другой ответ действительно работает, мне кажется слишком сложным. Я думаю, вам нужно использовать только символы ^ и $с каждой стороны от 0.
$r_val = preg_replace('/^0+$/', '-', $r_val);
Я изменил знак минуса на его эквивалент HTML-кода. Параноидально, да, но мы все-таки имеем дело с числами, поэтому, несмотря на то, что я выбрал черный знак минуса, может быть, не лучшая идея.
Опять же, было бы более полезно, если бы вы могли привести пример того, как выглядит строка $r_val
.
Обратите внимание, что \b
соответствует границам слов, которые также превращают строку типа "0.75
" в "-.75
". Я думаю, что это не желаемый результат.
Почему бы просто не сделать это?
if ( $r_val == 0 )
$r_val = '-';
Для этого вам не нужно использовать регулярное выражение. На самом деле, я бы посоветовал не делать этого по соображениям производительности. Операция выше примерно в 20 раз быстрее, чем регулярное выражение.
Кроме того, в руководстве PHP не рекомендуется использовать регулярные выражения для простых заметок:
Если вам не нужны фантастические правила замены (например, регулярные выражения), вы всегда должны использовать эту функцию вместо ereg_replace() или preg_replace().
http://us.php.net/manual/en/function.str-replace.php
Надеюсь, что это поможет!