替代一堆preg_replace

时间:2013-11-24 10:50:21

标签: php hyperlink preg-replace embed

目前我有一个自定义网址语法,用于保存输入的网址。然后我使用输出缓冲在执行结束时获取整个文档,并用锚标记替换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,这是荒谬的。我正在寻找有关如何实现此功能的建议。谢谢!

编辑:

我想我没有表达自己的清楚。我正在寻找一种方法来匹配我的所有组件与文档字符串的单个解析。例如,当你去购买杂货时,你不会去采摘西红柿,把它们带回家然后再去采摘黄瓜。你同时做所有的事情,这就是我在寻找的东西。谢谢!

2 个答案:

答案 0 :(得分:1)

好的,你想跳过使用preg_ *(尽管这是obviuos的选择),因为性能方面的考虑。

如果这已成为问题,那么您可能需要更改(1 *)而不是更换策略。

  

长话短说

     

[url] http://www.somesite.com/ [我的网站]

不是一个短篇小说: [我的网站]只有在事先了解[url]时才能格式化,并且两者之间(可变长度)的所有内容必须在<a href=""之间连接。 [我的网站]具有可变长度,必须在></a>之间进行提取和连接。

除了使用正则表达式之外,你可能不得不在字符串上执行多个操作str_replace),这意味着多个 secuential < / em>传递,这可能会相互干扰或其他内容。

我的长篇故事简短......

这就是正则表达式的用途,请使用这些精彩的工具。如果由于文档长度而开始出现性能问题,请考虑其他替代方法

  • 分解内容并分段提供,la page1,page2 type
  • 如果您的内容不需要进一步编辑,请保存格式化并让其直接在输出中通过
  • 从您当前的托管服务提供商升级
  • 更改 当前格式 内容将保存在(1 *)中。哦啦啦!这可能是一个完整的项目本身
  • (其他人可能想要获得更多经验)

答案 1 :(得分:0)

来自php.net关于preg_replace:

  

如果模式和替换参数都是数组,则每个模式   将被替换对手替换。

所以:

preg_replace( array('pattern_for_url', 'pattern_for_img'), array('replace_for_url', 'replace_for_img', $document_content) );

我认为这就是你想要的。