использование php preg_replace для замены всей строки символов и не замены, если строка является частью более длинной строки - PullRequest
1 голос
/ 01 февраля 2020

Регулярные выражения являются совершенно новыми для меня, и я много раз искал мое выражение для тестирования:

preg_replace('/\b0.00%\b/','- ', '0.00%')

Это дает 0.00%, когда я хочу - .

С preg_replace('/\b0.00%\b/','- ', '50.00%') дает 50.00%, что я и хочу - так что все в порядке.

Но очевидно, что выражение не работает, как это не так, в первом примере замена 0.00% на -.

Я могу придумать обходные пути с if(){} для проверки длины / содержимого строки, но предполагаю, что замена будет наиболее эффективной

Ответы [ 2 ]

2 голосов
/ 01 февраля 2020

Граница слова после % требует, чтобы слово char (буква, di git или _) появилось сразу после него, поэтому здесь замена не происходит.

Вам необходимо заменить границы слова однозначными границами, определенными с помощью (?<!\w) и (?!\w) поисков, которые не будут соответствовать, если ключевым словам предшествует или сопровождается символами слова:

$value='0.00%';
$str = 'Price: 0.00%';
echo preg_replace('/(?<!\w)' . preg_quote($value, '/') . '(?!\w)/i', '- ', $str);

См. PHP демо

Выход: Price: -

0 голосов
/ 01 февраля 2020

preg_replace имеет три аргумента, как вы, вероятно, уже знаете. Соответствующий шаблон регулярного выражения, значение замены и строка для поиска (в этом порядке).

Похоже, что ваш шаблон регулярного выражения preg_replace имеет границы слов \b, которые он ищет по обоим концам искомого значения 0.00%, которое на самом деле не нужно. Это немного похоже на ошибку, особенно когда я подключаю ее к регулярному веб-сайту , который я использую. Там все отлично работает. Вероятно, есть несколько странный вопрос, так что вы можете попробовать его без \b и попробовать что-то вроде начала строки ^ и конца строки символов $.

...