php preg_replace问号(“?”) - 无法正常工作

时间:2011-04-06 06:26:45

标签: php regex

我有一个字符串

$name = "name1?name2?name3?name4";

我想将此变量修改为

$name2 = "name1/name2/name3/name4";

使用php preg_replace

我该怎么做?

3 个答案:

答案 0 :(得分:7)

您可以轻松使用str_replace。我认为不需要preg family

$name2=str_replace("?","/",$name)

答案 1 :(得分:5)

您必须使用?

转义\
<?php
$string = 'name1?name2?';
$pattern = '/\?/';
$replacement = '/';
echo preg_replace($pattern, $replacement, $string);
?>

考验时间......

我坚持自己的回答,因为它最直接地回答了OP的问题。但我的速度评论并不准确 - 完全没有。我发现的差异很容易看到,但不是那么令人印象深刻的 IMO。*

The Benchmark:我拿了OP的字符串并连接了500000次 - 所以每个函数都有很多替代品(依赖于1.5或200万)。

以下是功能及其速度:

str_replace('?', '/', $test); // name1/name2/name3/name4/
0.388642073
0.389673948
0.385308981

preg_replace('/\?/', '/', $test); // name1/name2/name3/name4/
0.812348127
0.812065840
0.819634199

$bad = array('1?','2?','3?');
$good = array('1/','2/','3/');
str_replace($bad, $good, $test); // name1/name2/name3/name4?
0.712552071
0.725568056
0.718420029

preg_replace('/\?(\w+\d+)/', '/$1', $test); // name1/name2/name3/name4?
1.515372038
1.516302109
1.517566919

所以......我输了。此测试显示str_replace()比preg_replace() 快2倍 。但是,当您考虑完成所有150万次替换时,1.5秒vs 0.7秒(最后两个功能)并不坏 - 更不用说最后一个将比其竞争对手解决更多的组合。

当你写出完美的RegEx功能时,你不想要庆祝拳头吗? : - )

答案 2 :(得分:1)

你可以使用str_replace,就像@Shakti所说的那样。

或者,如果你坚持用preg_replace来做,你可以这样做:

$name2 = preg_replace("|\?|", "/", $name);
echo $name2;

str_replace和preg_replace之间的区别在于,preg_replace使用regex进行替换。而且,在正则表达式中,字符?具有特殊含义。为了使preg_replace无意义,你必须使用\来逃避它。

有关更多信息,请阅读PHP手册中的每个函数说明: