我遇到了这行代码:
preg_match_all("!boundary=(.*)$!mi", $content, $matches);
但是
内容类型:multipart / alternative; 边界= f403045e21e067188c05413187fd \ r \ n
返回
f403045e21e067188c05413187fd \ r
何时返回
f403045e21e067188c05413187fd
(没有\r
)
任何想法如何解决这个问题?
PS:它应该适用于\r
不存在的情况,仅\n
答案 0 :(得分:2)
有两种选择。
使用延迟点匹配并添加可选的\r
:
preg_match_all("!boundary=(.*?)\r?$!mi", $content, $matches);
使用与[^\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。
注意第二种方法效率更高。
答案 1 :(得分:0)
将表达式更改为
preg_match_all("!boundary=(.*)\\r?$!mi", $content, $matches);
如果存在\ r,则应删除\ r。
已编辑:\ r \ n需要在RegExp中转义。