REGEX - 忽略换行符
REGEX - ignore new line characters
我遇到了这行代码:
preg_match_all("!boundary=(.*)$!mi", $content, $matches);
但是
Content-Type: multipart/alternative;
boundary=f403045e21e067188c05413187fd\r\n
它returns
f403045e21e067188c05413187fd\r
什么时候应该 return
f403045e21e067188c05413187fd
(没有 \r
)
有什么解决办法吗?
PS.: 它也应该适用于 \r
不存在的情况,只有 \n
将表达式更改为
preg_match_all("!boundary=(.*)\r?$!mi", $content, $matches);
如果存在,应该删除 \r。
已编辑:\r 需要在 RegExp 中转义。
有两种选择。
使用惰性点匹配并添加一个可选的\r
:
preg_match_all("!boundary=(.*?)\r?$!mi", $content, $matches);
使用 [^\r\n]
否定字符 class 匹配任何字符,但 \r
和 \n
:
preg_match_all("!boundary=([^\n\r]*)!mi", $content, $matches);
或者,更短的版本,使用 \V
shorthand 字符 class 匹配任何不是垂直空格的字符(不是换行字符):
preg_match_all("!boundary=(\V*)!mi", $content, $matches);
见this or this PHP demo。
注意第二种方法效率更高。
我遇到了这行代码:
preg_match_all("!boundary=(.*)$!mi", $content, $matches);
但是
Content-Type: multipart/alternative; boundary=f403045e21e067188c05413187fd\r\n
它returns
f403045e21e067188c05413187fd\r
什么时候应该 return
f403045e21e067188c05413187fd
(没有 \r
)
有什么解决办法吗?
PS.: 它也应该适用于 \r
不存在的情况,只有 \n
将表达式更改为
preg_match_all("!boundary=(.*)\r?$!mi", $content, $matches);
如果存在,应该删除 \r。
已编辑:\r 需要在 RegExp 中转义。
有两种选择。
使用惰性点匹配并添加一个可选的
\r
:preg_match_all("!boundary=(.*?)\r?$!mi", $content, $matches);
使用
[^\r\n]
否定字符 class 匹配任何字符,但\r
和\n
:preg_match_all("!boundary=([^\n\r]*)!mi", $content, $matches);
或者,更短的版本,使用 \V
shorthand 字符 class 匹配任何不是垂直空格的字符(不是换行字符):
preg_match_all("!boundary=(\V*)!mi", $content, $matches);
见this or this PHP demo。
注意第二种方法效率更高。