首页 > 解决方案 > 使用 php preg_replace 替换整个字符串,如果字符串是较长字符串的一部分,则不替换

问题描述

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

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

0.00%我想要的是- .

有了我想要的preg_replace('/\b0.00%\b/','- ', '50.00%')收益50.00%- 所以这很好。

但显然表达式不起作用,在第一个示例中替换0.00%-.

我可以想到用于测试字符串长度/内容的解决方法,if(){}但假设替换将是最有效的

标签: phpregexpreg-replace

解决方案


之后的单词边界%需要一个单词 char(字母、数字或_)紧随其后,因此这里没有替换。

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

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

查看PHP 演示

输出:Price: -


推荐阅读