我遇到了以下代码行:

preg_match_all("!boundary=(.*)$!mi", $content, $matches);


但对于


内容类型:多部分/替代;
边界= f403045e21e067188c05413187fd \ r \ n


它返回


f403045e21e067188c05413187fd \ r


什么时候应该回来


f403045e21e067188c05413187fd


(没有\r

任何想法如何解决这一问题?

PS .:它也适用于不存在\r的情况,只有\n

最佳答案

有两种选择。


使用惰性点匹配并添加可选的\r

preg_match_all("!boundary=(.*?)\r?$!mi", $content, $matches);


this PHP demo


使用与[^\r\n]\r以外的任何字符匹配的\n否定字符类:

preg_match_all("!boundary=([^\n\r]*)!mi", $content, $matches);


或者,使用\V速记字符类的简短版本,该类与非垂直空格(不是换行符)的任何字符匹配:

preg_match_all("!boundary=(\V*)!mi", $content, $matches);


请参见thisthis PHP demo

请注意,第二种方法效率更高。

09-25 15:51