我需要一种方法来替换传递的字符串中的一些变量。
示例:
我通过“#fname#跳过高墙让他的手机号码#phone#”。
我需要将字符串替换为“John跳过高墙以获取号码为0123456789的手机”。
我过去曾使用过str_replace但是他们有很多标签(#example#)每次执行需要更换 - 1000+,我对速度性能保持警惕..
也许是preg_replace的正则表达式?语言是PHP。
谢谢。
凯尔
答案 0 :(得分:2)
请注意,在处理字符串时,正则表达式比内置PHP函数慢。 RegExps应该用于复杂的标识符/隔离器/操作,经验法则是如果可以使用PHP字符串函数,它应该是(它更快!)
答案 1 :(得分:1)
str_replace仍然比preg_replace更快。抱歉,str_replace是您的最佳选择。
答案 2 :(得分:1)
好吧,你可以使用带有str_replace
的数组:
所以,假设你要替换这些标签:
$search = array(
'#firstname#',
'#lastname#',
'#phone#',
'#foobar',
);
你想使用这些数据:
$replace = array(
'John',
'Doe',
'5555553535',
'baz',
);
你有一个你想要的字符串列表:
$strings = array(
'My First Name is: #firstname#',
'My Last Name is: #lastname#',
'My Contact Info Is: #phone#, #foobar#',
);
你可以打电话:
$populatedStrings = str_replace($search, $replace, $strings);
哪会导致:
array(
'My First Name is: John',
'My Last Name is: Doe',
'My Contact Info Is: 5555555353, baz',
);
所以你可以一次性做很多事情,它应该比用这种操作的正则表达式做任何事情要快得多(如果你想为每个标签多次替换REGEX可能会更好,例如:{{1}所有的名字......)
答案 3 :(得分:0)
preg_replace_callback()
可能适用于此,因为它只会遍历字符串一次。您必须在回调函数中存储要替换的标记,例如在数组中。
我不能说这是否比str_replace()
更快/更节省资源 - 你必须做一些基准测试。