仅替换字符串中的某些'%'

时间:2013-06-14 21:39:36

标签: php string

我使用str_replace()用'%'替换字符串中的所有斜杠,然后通过函数运行新编辑的字符串。这个函数所做的一件事就是在字符串中添加'%%%'。

现在,我需要仅替换之前替换的百分号,即之前的斜杠,再次使用斜杠。

因此,如果原始字符串如下所示:'the/wuick/bornw/foc/jumps/over/the/lazy/dog.'

在通过函数后,它将如下所示:'The%quick%brown%fox%jumps%over%the/lazy%dog.%%%'

然后在通过我需要帮助的部分之后,它将如下所示:'The/quick/brown/fox/jumps/over/the/lazy/dog.%%%'

我非常感谢任何和所有帮助,只替换我之前用str_replace()做过的%。

3 个答案:

答案 0 :(得分:4)

要用斜杠替换单个%符号,可以使用

$result = preg_replace('/(?<!%)%(?!%)/', '/', $subject);

这会使用negative lookaround assertions来确保只有那些%个符号匹配,这些符号既不会先于另一个%符号,也不会跟在其后面。

regex101.com上查看。

答案 1 :(得分:0)

没有太多并发症按此顺序执行:

$str = 'The%quick%brown%fox%jumps%over%the/lazy%dog.%%%';
$str= str_replace('%%%','***triple_percent**', $str);
$str= str_replace('%','/', $str);
$str= str_replace('***triple_percent**','%%%', $str);

理想的是首先要了解为什么你有这么多%,我相信你可以简化你的功能。

另一种解决方案是使用像Tim在他的回答中所说的正则表达式

$str= preg_replace('/(?<!%)%(?!%)/', '/', $str);

分手意味着:

(?<!%)     Not % before
%          find %
(?!%)      Not % after

还添加g以便它可以多次找到它,并且在您可能需要的情况下我会区分大小写:

$str= preg_replace('/(?<!%)%(?!%)/ig', '/', $str);

答案 2 :(得分:-1)

使用空白字符串添加另一个重播,例如:

$string = str_replace('%', '', $string);