在php中查找并替换

时间:2010-11-03 13:58:07

标签: php regex tagging

我需要一种方法来替换传递的字符串中的一些变量。

示例:

我通过“#fname#跳过高墙让他的手机号码#phone#”。

我需要将字符串替换为“John跳过高墙以获取号码为0123456789的手机”。

我过去曾使用过str_replace但是他们有很多标签(#example#)每次执行需要更换 - 1000+,我对速度性能保持警惕..

也许是preg_replace的正则表达式?语言是PHP。

谢谢。

凯尔

4 个答案:

答案 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()更快/更节省资源 - 你必须做一些基准测试。