我遇到了以下代码行:
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);
请参见this或this PHP demo。
请注意,第二种方法效率更高。