заменить точное совпадение в php

0

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 и т.д.

  • 0
    Каков формат $ r_val?
  • 0
    $ r_val имеет значения типа float
Показать ещё 2 комментария
Теги:

4 ответа

4
Лучший ответ

Это зависит от того, как ваши данные отформатированы внутри $r_val, но хорошим местом для начала было бы попробовать:

$r_val = preg_replace('/(?<!\.)\b0\b(?!\.)/', '-', $r_val);

Где \b - это символ длины 0, представляющий начало или конец слова.

Как это ни странно, но документация Perl regex действительно хороша для объяснения регулярной части функций preg_* поскольку Perl - это то, где функциональность фактически реализована.

  • 0
    Я не был уверен, что \ b применяется с числами, хотя, очевидно, так и есть. :) Альтернативный шаблон может использовать комбинацию «смотреть вперед» и «смотреть за утверждениями». '# (? <! \ D) 0 (?! \ D) #'
1

В то время как другой ответ действительно работает, мне кажется слишком сложным. Я думаю, вам нужно использовать только символы ^ и $с каждой стороны от 0.

$r_val = preg_replace('/^0+$/', '&#45', $r_val);
  • ^ указывает, что регулярное выражение должно совпадать с началом строки.
  • $указывает, что регулярное выражение должно совпадать с концом строки.
  • + означает соответствие этому шаблону 1 или более раз

Я изменил знак минуса на его эквивалент HTML-кода. Параноидально, да, но мы все-таки имеем дело с числами, поэтому, несмотря на то, что я выбрал черный знак минуса, может быть, не лучшая идея.

  • 0
    Эй, я не знал, что я новичок в регулярных выражениях и все. Спасибо за этот код Matw =)
1

Опять же, было бы более полезно, если бы вы могли привести пример того, как выглядит строка $r_val.

Обратите внимание, что \b соответствует границам слов, которые также превращают строку типа "0.75" в "-.75". Я думаю, что это не желаемый результат.

  • 0
    ты прав, это замена того, чего я не хочу. я отредактировал мой вопрос, вы можете посмотреть там примеры значений, которые имеет $ r_val
0

Почему бы просто не сделать это?


if ( $r_val == 0 )
    $r_val = '-';

Для этого вам не нужно использовать регулярное выражение. На самом деле, я бы посоветовал не делать этого по соображениям производительности. Операция выше примерно в 20 раз быстрее, чем регулярное выражение.

Кроме того, в руководстве PHP не рекомендуется использовать регулярные выражения для простых заметок:

Если вам не нужны фантастические правила замены (например, регулярные выражения), вы всегда должны использовать эту функцию вместо ereg_replace() или preg_replace().

http://us.php.net/manual/en/function.str-replace.php

Надеюсь, что это поможет!

  • 0
    $ r_val! = 0, хотя, исходя из того, что он сказал, он, скорее всего, будет держать «5.0, 34.05, 23.4»
  • 0
    Он сказал: «У меня есть некоторые данные, в которых некоторые из значений хранятся как ноль (0). Что я хочу сделать, это заменить их на« - ». То есть те, которые хранятся как 0 (то есть, $ rval == 0) измениться на '-', в то время как остальные останутся одни. Нет необходимости в регулярных выражениях.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню