目前我有一个自定义网址语法,用于保存输入的网址。然后我使用输出缓冲在执行结束时获取整个文档,并用锚标记替换url语法。但我也有一个图像语法,可以将图像链接从输入转换为图像标记,以及将youtube链接转换为嵌入视频的youtube标记。
长话短说
[url]http://www.somesite.com/[my site]
成为
<a href='http://www.somesite.com/'>my site</a>
[img]http://www.somesite.com/image.jpg[/img]
成为
<img src='http://www.somesite.com/image.jpg'/>
你明白了。这有点让我烦恼,因为我知道preg_replace
已知会对性能产生影响,并且在大约10,000个字符长的字符串上多次运行它
(我网站的平均html文档长度)真的不太好。我还希望为更多网站实现自动嵌入,并且使用我当前的算法意味着我将不得不为每个网站添加新的preg_replace
,这是荒谬的。我正在寻找有关如何实现此功能的建议。谢谢!
编辑:
我想我没有表达自己的清楚。我正在寻找一种方法来匹配我的所有组件与文档字符串的单个解析。例如,当你去购买杂货时,你不会去采摘西红柿,把它们带回家然后再去采摘黄瓜。你同时做所有的事情,这就是我在寻找的东西。谢谢!
答案 0 :(得分:1)
好的,你想跳过使用preg_ *(尽管这是obviuos的选择),因为性能方面的考虑。
如果这已成为问题,那么您可能需要更改(1 *)而不是更换策略。
长话短说
[url] http://www.somesite.com/ [我的网站]
不是一个短篇小说:
[我的网站]只有在事先了解[url]时才能格式化,并且两者之间(可变长度)的所有内容必须在<a href="
和"
之间连接。 [我的网站]具有可变长度,必须在>
和</a>
之间进行提取和连接。
str_replace
),这意味着多个 secuential < / em>传递,这可能会相互干扰或其他内容。
我的长篇故事简短......
这就是正则表达式的用途,请使用这些精彩的工具。如果由于文档长度而开始出现性能问题,请考虑其他替代方法
答案 1 :(得分:0)
来自php.net关于preg_replace:
如果模式和替换参数都是数组,则每个模式 将被替换对手替换。
所以:
preg_replace( array('pattern_for_url', 'pattern_for_img'), array('replace_for_url', 'replace_for_img', $document_content) );
我认为这就是你想要的。