用于PHP中多个匹配的preg_replace函数

时间:2016-07-02 20:28:07

标签: php regex

我正在尝试使用summer note js编辑器获取插入图像字符串的base64代码。

我设法得到了这个

preg_replace('#<img\ssrc="data:image/([\w]+);base64,([a-zA-Z0-9+/-_=]+)"\sstyle="width:\s[0-9]+px;">#',"IMAGE REMOVED FROM CHROME\r\n", $content,-1, $counter);

以及一些变化取决于

样式和数据文件名和src的位置总是根据不同的浏览器而变化,所以我有一些变化。

1)有更简单的方法吗?

如果我拥有 img src,style和data-filename 的所有组件,我会匹配字符串吗?我可以创建所有的变化,但如果我要为10个不同的变化做$ content = preg_replace 10次,那么找到一个匹配是不是非常慢?如果我的$ string非常长,它会变得越来越慢。

2)我需要拔出base64字符串以将其保存为图像,如何使用上面的正则表达式来帮助我fopen,fwrite,fclose?

先谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用以下内容:

<img(\s+src="data:image/([\w]+);base64,([\w+/-_=]+)")?(\s+style="width:\s*([\d]+)px;")?\s*>

您可以查看此working example

这样,它涵盖了src和/或style属性的缺失 你最终要将它改进为:

  • 将2个属性组更改为非捕获,具体取决于您找到它们的方式是否有用
  • 也会使其内容部分可选,甚至可选择更丰富(例如style可能包含其他属性)

其他一些要点:

  • 为了面对任何情况,我在属性之间用\s替换了\s+,在\s*
  • 内用style替换了[a-zA-Z0-9+/-_=]+
  • 我简化了[0-9]+[\w+/-_=]+个表达式,这些表达式变为[\d]+100000
  • 我在最后一个附近添加了捕捉括号(从您的问题来看,似乎您需要在可用时获得宽度)