Php preg_replace plus在src内部的开始和结束处追加以替换cid:
我有一个HTML字符串。为此,假设字符串为:Php preg_replace plus在src内部的开始和结束处追加以替换cid:,php,regex,email-attachments,Php,Regex,Email Attachments,我有一个HTML字符串。为此,假设字符串为: <img id="Picture_x0020_1" src="cid:image001.jpg@01D05CBF.CF7A44B0" alt="Variety 008 (893 x 799) (223 x 200)" height="200" width="223">dflkjdslkjdsfldskfjdlfkjdlfksdjfflkdsjfdlkdfdjflkdfjdlkjfkdlfjdljfldjfldjflkdjjfkd<i
<img id="Picture_x0020_1" src="cid:image001.jpg@01D05CBF.CF7A44B0" alt="Variety 008 (893 x 799) (223 x 200)" height="200" width="223">dflkjdslkjdsfldskfjdlfkjdlfksdjfflkdsjfdlkdfdjflkdfjdlkjfkdlfjdljfldjfldjflkdjjfkd<img id="Picture_x0020_1" src="cid:image001.jpg@01D05CBF.CF7A44B0" alt="Variety 008 (893 x 799) (223 x 200)" height="200" width="223">hkjhkhkhkhkhkjhjkhhkjhkjhkjhkjhjkhkjhkjhkhkjhkjhjkhkjhkjhkjhkjhkjhkjhkjhkjhkjhkjhkjhkjhkjh<img id="Picture_x0020_1" src="cid:image001.jpg@01D05CBF.CF7A44B0" alt="Variety 008 (893 x 799) (223 x 200)" height="200" width="223">dsjhfdsjfdjflsjflkjdflkjffldskjfdljdlfkjflkdjflkdjfdslkjfkds
因此,实际图像名称如下所示:
308907_image001。jpg@01D05CBF.CF7A44B0_image001.jpg
现在,我的目标是替换所有这些事件:
cid:image001。jpg@01D05CBF.CF7A44B0
与
附件/308907_image001。jpg@01D05CBF.CF7A44B0_image001.jpg
基本上去掉cid:string,将$mail_id和u附加到字符串的开头,并将_image001.jpg附加到末尾
请记住,我可能会在html字符串中嵌入一堆这样的cid src
所以对正则表达式不是很好,我只是在小步做,首先我想知道如何替换cid:image001。jpg@01D05CBF.CF7A44B0附附件/308907_image001。jpg@01D05CBF.CF7A44B0然后我会尝试找出如何在末尾附加_image001.jpg
我设法构建了一个正则表达式来突出显示整个图像标记,并在其中运行它,从而突出显示元素[1]中的cid:值:
我在想这样的事情,但它只是返回一个空字符串,但逻辑似乎在regex工具中起作用,所以我不明白为什么它不起作用,可能是因为regex有3个元素,我需要访问元素[1]来获取cid:值,不确定:
$string = preg_replace('/(<img\b\s+.*?src=\")(.*?cid:.*?)(\">)/g', 'attachments/'.$mail_id.'_', $html);
但是,因为电子邮件中可能有很多这样的内容,我认为这种方法行不通,而且从性能角度来看,它可能不太好,因为有些电子邮件在某些情况下可能会很大
我担心的是,由于在解析过程中可能会有一封很大的电子邮件,所以在调用preg_replace函数的同时,可能有一种方法可以做到这一点
如果有人给我指出了正确的方向,并给了我一些实现这一目标的最佳方法的提示,我很乐意找出实际的代码。试试这个
$re = "/src=\\\"cid:(.*?)@(.*?)\\\"/s";
$str = "<img id=\"Picture_x0020_1\" src=\"cid:image001.jpg@01D05CBF.CF7A44B0\" alt=\"Variety 008 (893 x 799) (223 x 200)\" height=\"200\" width=\"223\">dflkjdslkjdsfldskfjdlfkjdlfksdjfflkdsjfdlkdfdjflkdfjdlkjfkdlfjdljfldjfldjflkdjjfkd<img id=\"Picture_x0020_1\" src=\"cid:image001.jpg@01D05CBF.CF7A44B0\" alt=\"Variety 008 (893 x 799) (223 x 200)\" height=\"200\" width=\"223\">hkjhkhkhkhkhkjhjkhhkjhkjhkjhkjhjkhkjhkjhkhkjhkjhjkhkjhkjhkjhkjhkjhkjhkjhkjhkjhkjhkjhkjhkjh<img id=\"Picture_x0020_1\" src=\"cid:image001.jpg@01D05CBF.CF7A44B0\" alt=\"Variety 008 (893 x 799) (223 x 200)\" height=\"200\" width=\"223\">dsjhfdsjfdjflsjflkjdflkjffldskjfdljdlfkjflkdjflkdjfdslkjfkds";
$subst = "src=\"attachments/".$mailid."_$1@$2_$1\"";
$result = preg_replace($re, $subst, $str);
$re=“/src=\\\”cid:(.*?@(.*?\\\”/s”;
$str=“DFLKJDSLKJDSFLDSKFJDLFKJDFKJFFLKJFDLKDFDJFLKDFJDFLJFLDJFLKDJFKDLJFLDJFLJFKDKJHKKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJKJKJKJJJJKJJJJJKJKJJJJJJKJJ;
$subst=“src=\”附件/“$mailid。”\u$1@$2\u$1\”;
$result=preg_replace($re,$subst,$str);
看
更新:
模式=/src=\“cid:(.*?)@(.*?\”/s
src
=匹配字符src
\”
=匹配字符“
字面意思cid
:=匹配字符cid:
现在,我们必须从字符串中捕获图像名称,这样我们就可以将其追加并前置到输出字符串中。图像名称可以在cid:
和@
之间捕获
因此,cid:(.*)@
将捕获图像名称。这是模式中的第一个捕获组。(即,$1
)。图像名称将存储在$1
中,因为它是第一个捕获的组)。如果使用preg\u match
,则它将是$match[1]
然后我们需要介于@
和之间的字符串“
这是第二个捕获组。因此@(.*?)
在替换前被称为$2
”
功能
在preg\u replace
中,匹配的字符串将存储到$0
,$1
中,依此类推。在preg_match
中,匹配的字符串将存储到$match[0]
,$match[1]
中,依此类推。。$match
是用户定义的数组名,它将被解析为函数中的第三个参数Perfect,除了在$mailid上缺少连接外,效果非常好。应该是这样的:$subst=“src=\”附件/“$mailid。”\u$1@$2\u$1\”;请更新,我接受答案并投票。感谢您的帮助也为了我和其他人的利益,您能解释一下$subst行是怎么回事吗。我理解这是怎么回事,因为它构建了src字符串的开头,前面有附件/$mailid_uu,然后是$1@$2,我假设它会回显image001。jpg@01D05CBF.CF7A44B0部分,最后,$1呼应出image001.jpg我不明白的是你从哪里构建了那些$1,$2变量,它是从$re正则表达式的元素中提取出来的,还是与substr函数相关联的人?更新了我的答案,但如果您有任何疑问,请告诉我
$current_image_name = 'attachments/308907_image001.jpg@01D05CBF.CF7A44B0';
$new_image_name = 'attachments/308907_image001.jpg@01D05CBF.CF7A44B0_image001.jpg';
str_replace($current_image_name, $new_image_name,$html);
$re = "/src=\\\"cid:(.*?)@(.*?)\\\"/s";
$str = "<img id=\"Picture_x0020_1\" src=\"cid:image001.jpg@01D05CBF.CF7A44B0\" alt=\"Variety 008 (893 x 799) (223 x 200)\" height=\"200\" width=\"223\">dflkjdslkjdsfldskfjdlfkjdlfksdjfflkdsjfdlkdfdjflkdfjdlkjfkdlfjdljfldjfldjflkdjjfkd<img id=\"Picture_x0020_1\" src=\"cid:image001.jpg@01D05CBF.CF7A44B0\" alt=\"Variety 008 (893 x 799) (223 x 200)\" height=\"200\" width=\"223\">hkjhkhkhkhkhkjhjkhhkjhkjhkjhkjhjkhkjhkjhkhkjhkjhjkhkjhkjhkjhkjhkjhkjhkjhkjhkjhkjhkjhkjhkjh<img id=\"Picture_x0020_1\" src=\"cid:image001.jpg@01D05CBF.CF7A44B0\" alt=\"Variety 008 (893 x 799) (223 x 200)\" height=\"200\" width=\"223\">dsjhfdsjfdjflsjflkjdflkjffldskjfdljdlfkjflkdjflkdjfdslkjfkds";
$subst = "src=\"attachments/".$mailid."_$1@$2_$1\"";
$result = preg_replace($re, $subst, $str);