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

8xiog9wr  于 2023-04-28  发布在  PHP
关注(0)|答案(1)|浏览(131)

我正在尝试使用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);

以及取决于<img src="data:img/jpg;base65string style="width" data-filename>的一些变化。
styledata-filenamesrc的位置总是根据不同的浏览器而变化,所以我有一些变化。
1.有更简单的方法来做到这一点吗?
就像如果我有img srcstyledata-filename的所有组件,我将只匹配字符串?我可以创建所有的变量,但是如果我为10个不同的变量执行10次$content = preg_replace,仅仅找到一个匹配不是非常慢吗?如果我的$string非常长,它会变得越来越慢。
1.我需要提取base64字符串以将其保存为图像,如何使用上面的正则表达式来帮助我fopenfwritefclose

wlsrxk51

wlsrxk511#

你可以使用类似这样的东西:

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

你可以看看这个working example
这样,它涵盖了src和/或style属性的缺失。
最终取决于您是否将其细化为:

  • 将2个属性组更改为非捕获,这取决于您如何发现它们是否有用
  • 还使它们的内容部分可选,或者甚至可选地更丰富(例如,例如style可能包含其他属性)

一些附加要点:

  • 为了应对任何情况,我在属性之间用\s+替换了\s,在相反的style内部用\s*替换了style
  • 我将[a-zA-Z0-9+/-_=]+[0-9]+表达式简化为[\w+/-_=]+[\d]+
  • 我在最后一个字符串周围添加了捕获括号(从你的问题来看,似乎你需要在可用时获取宽度)

相关问题