使用 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);
输出:Price: -
preg_replace 有三个参数,您可能已经知道。要匹配的正则表达式模式、替换值和要搜索的字符串(按此顺序)。
您的 preg_replace 正则表达式模式似乎有单词边界 \b
它正在您正在寻找的值的两端寻找 0.00%
这实际上并不需要。这对我来说有点像错误,尤其是当我将它插入我使用的 regex website 时。它在那里工作正常。它可能有点奇怪,所以你可能想在没有 \b
的情况下尝试它并尝试类似字符串开头 ^
和字符串结尾字符 $
.
正则表达式对我来说是全新的,为了测试目的我搜索了很多表达式是这样的:
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);
输出:Price: -
preg_replace 有三个参数,您可能已经知道。要匹配的正则表达式模式、替换值和要搜索的字符串(按此顺序)。
您的 preg_replace 正则表达式模式似乎有单词边界 \b
它正在您正在寻找的值的两端寻找 0.00%
这实际上并不需要。这对我来说有点像错误,尤其是当我将它插入我使用的 regex website 时。它在那里工作正常。它可能有点奇怪,所以你可能想在没有 \b
的情况下尝试它并尝试类似字符串开头 ^
和字符串结尾字符 $
.