我有一个字符串
$name = "name1?name2?name3?name4";
我想将此变量修改为
$name2 = "name1/name2/name3/name4";
使用php preg_replace
。
我该怎么做?
答案 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手册中的每个函数说明: