REGEX - 忽略换行符

时间:2016-11-13 21:04:30

标签: php regex email-headers

我遇到了这行代码:

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

但是

  

内容类型:multipart / alternative;   边界= f403045e21e067188c05413187fd \ r \ n

返回

  

f403045e21e067188c05413187fd \ r

何时返回

  

f403045e21e067188c05413187fd

(没有\r

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

PS:它应该适用于\r不存在的情况,仅\n

2 个答案:

答案 0 :(得分:2)

有两种选择。

  1. 使用延迟点匹配并添加可选的\r

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

  2. 请参阅this PHP demo

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

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

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

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

      请参阅thisthis PHP demo

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

答案 1 :(得分:0)

将表达式更改为

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

如果存在\ r,则应删除\ r。

已编辑:\ r \ n需要在RegExp中转义。