使用 php preg_replace 替换整个字符串,如果字符串是较长字符串的一部分则不替换

using php preg_replace to replace a whole character string and not replace if string is part of a longer string

正则表达式对我来说是全新的,为了测试目的我搜索了很多表达式是这样的:

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

当我想要 - 时它会产生 0.00%

preg_replace('/\b0.00%\b/','- ', '50.00%') 产生 50.00%,这就是我想要的 - 所以这很好。

但显然表达式不起作用,因为它不是,在第一个示例中将 0.00% 替换为 -

我可以想到使用 if(){} 来测试 length/content 字符串的解决方法,但假设替换最有效

% 之后的 word boundary 需要紧跟其后的单词字符(字母、数字或 _),因此这里没有替换。

您需要用在 (?<!\w)(?!\w) 环视的帮助下定义的明确边界替换单词边界,如果关键字前面或后面有单词字符,匹配将失败:

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

PHP demo

输出:Price: -

preg_replace 有三个参数,您可能已经知道。要匹配的正则表达式模式、替换值和要搜索的字符串(按此顺序)。

您的 preg_replace 正则表达式模式似乎有单词边界 \b 它正在您正在寻找的值的两端寻找 0.00% 这实际上并不需要。这对我来说有点像错误,尤其是当我将它插入我使用的 regex website 时。它在那里工作正常。它可能有点奇怪,所以你可能想在没有 \b 的情况下尝试它并尝试类似字符串开头 ^ 和字符串结尾字符 $.