【问题标题】:Alternative to a bunch of preg_replace [closed]替代一堆 preg_replace [关闭]
【发布时间】:2013-12-09 00:48:24
【问题描述】:

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

编辑:

我觉得我表达得不够清楚。我正在寻找一种方法来匹配我的所有组件与文档字符串的单个解析。例如,当您去买杂货时,您不会去捡西红柿,而是将它们带回家然后再去捡黄瓜。你同时做所有的事情,这就是我要找的。谢谢!

【问题讨论】:

标签: php hyperlink preg-replace embed


【解决方案1】:

好的,出于性能考虑,您想跳过使用 preg_*(尽管这是显而易见的选择)。

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

长话短说

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

不是那么短的故事: [my site] 只有在事先知道 [url] 的情况下才能格式化,并且(可变长度)之间的所有内容都必须在 <a href="" 之间连接。长度可变的 [我的网站] 也必须在 ></a> 之间提取和连接。

这一切的意思是,除了使用正则表达式之外,您可能必须对您的字符串执行多次操作 (str_replace),这意味着多次安全 通行证,可能会相互干扰或干扰其他内容。

长话短说……

这就是正则表达式的用途,您可以随意使用这些美妙的工具。如果由于文档长度而开始出现性能问题,请考虑其他替代方案

  • 分解内容并分段提供,la page1,page2 类型
  • 如果您的内容不需要进一步编辑,请保存格式并让它在输出时不转义地传递
  • 从您当前的托管服务提供商升级
  • 更改当前格式内容保存在 (1*)。哦啦啦!这本身可能就是一个完整的项目
  • (其他人可能想加入更多经验)

【讨论】:

  • 我真正意识到的是,我不需要搜索整个文档,只需将用户输入保存在数据库和其他东西中......其中一个时刻会让你觉得“我是智障吗? “..感谢您的回答!
【解决方案2】:

来自 php.net 关于 preg_replace:

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

所以:

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

我想这就是你想要的。

【讨论】:

  • 好吧,这只会节省我的打字时间,但它仍会运行 preg_replace 多次:/
  • 为什么还要运行 preg_replace 多次?您可以在一个 preg 中匹配所有组件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-27
  • 1970-01-01
  • 1970-01-01
  • 2020-10-16
  • 2010-09-22
相关资源
最近更新 更多