正则表达式对我来说是一个全新的概念,为了测试的目的,我对表达式进行了大量的搜索,结果是:
preg_replace('/\b0.00%\b/','- ', '0.00%')
当我想要的是-
时,它生成0.00%
。
使用preg_replace('/\b0.00%\b/‘,'-','50.00%')
生成50.00%
,这是我想要的-所以这很好。
但是很明显,表达式的工作方式并不是这样,在第一个示例中,将0.00%
替换为-
。
我可以用if(){}
来解决测试字符串的长度/内容的问题,但我认为replace将是最有效的
%
后面的单词边界要求在其后面出现单词字符(字母,数字或_
),因此这里不会发生替换。
您需要用在(?<!\w)
和(?!\w)
lookaround的帮助下定义的明确边界替换单词边界,如果关键字前面或后面都是单词字符,则这些lookaround将导致匹配失败:
$value='0.00%';
$str = 'Price: 0.00%';
echo preg_replace('/(?<!\w)' . preg_quote($value, '/') . '(?!\w)/i', '- ', $str);
请参阅PHP演示
输出:价格:-
preg_replace有三个参数,您可能已经知道了。 要匹配的正则表达式模式,替换值和要搜索的字符串(按此顺序)。
您的preg_replace正则表达式模式似乎在您要查找的值0.00%
的两端都有它要查找的单词边界\b
,这实际上不应该是需要的。 在我看来,这有点像一个bug,尤其是当我将它插入到我使用的regex网站时。 那里很好用。 它可能有一个有点奇怪的查询,因此您可能想尝试不使用\b
,而尝试使用字符串开头的^
和字符串结尾的字符$
。