【发布时间】:2012-04-19 20:13:26
【问题描述】:
我可以使用explode 来做到这一点(或者与strrpos 一起玩),但我更喜欢使用preg_replace,因为我认为应该更快一些(不是吗?)。另外,它简洁优雅。
目的是,给定一个类似a_b_c 的字符串,以获取另一个字符串其中最后一个_ 之后的字符 替换为传递的字符串。
我不擅长正则表达式。我得找时间买一本好书学习。无论如何,我已经尝试过这个正则表达式'/_(.*)$/',因为 匹配字符串的结尾,捕获最后一个下划线之后的任何字符。
我的论证有什么问题?
// Do it using explode
function foo($string, $replacement)
{
$pieces = explode('_', $string);
array_pop($pieces);
return implode('_', array_merge($pieces, array($replacement)));
}
// Do it using regular expression (not working)
function bar($string, $replacement)
{
return preg_replace('/_(.*)$/', $replacement, $string);
}
echo foo('a_b_c', 3); // Prints a_b_3
echo bar('a_b_c', 3); // Prints a3 wrong!!!
【问题讨论】:
-
我遇到了问题。我想要正则表达式!现在我有两个问题;)
-
preg 比简单的字符串函数慢 .. 在大多数情况下
-
@Hajo 同意 - 在某些情况下,它会慢得多,具体取决于使用的实际正则表达式;看我的回答!
标签: php regex preg-replace preg-match