【发布时间】:2012-01-14 17:58:09
【问题描述】:
我有一个包含以@ 符号开头的用户名的文本。示例:
One day @john decided to ask @jane out.
我想用链接替换所有出现的用户名,举例来说,我想用链接用户替换@user,例如:
One day link-john decided to ask link-jane out.
这可以通过以下命令完成:
preg_replace('`@([a-zA-Z0-9]{2,15})`', 'link-$1', $text);
此外,我想获得一个包含所有匹配项的数组,例如 preg_match 会完成的,但我做不到,因为 preg_replace 似乎没有提供该数组。实现这一目标的最有效方法是什么?我觉得做 preg_match 和后来的 preg_replace 会浪费资源,不是吗?
如果您觉得有更好的方法来实现这一点,我将非常感谢您的反馈。
谢谢!
【问题讨论】:
-
不,没有更好的选择。您可以使用
preg_replace_callback在回调中替换和组装匹配项。但这并不能算得上“更好”。 -- 关于资源,总是在 分析之后优化。