Php 正则表达式-忽略新行字符

Php 正则表达式-忽略新行字符,php,regex,email-headers,Php,Regex,Email Headers,我遇到了这一行代码: preg_match_all("!boundary=(.*)$!mi", $content, $matches); 要不是 内容类型:多部分/备选; 边界=F43045E21E067188C05413187FD\r\n 它回来了 F43045E21E067188C05413187FD\r\n 什么时候应该回来 F43045E21E067188C05413187FD (不带\r) 有没有办法解决这个问题 注:当\r不存在时,它也应该起作用,只有\n将表达式更改为 preg_

我遇到了这一行代码:

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

内容类型:多部分/备选; 边界=F43045E21E067188C05413187FD\r\n

它回来了

F43045E21E067188C05413187FD\r\n

什么时候应该回来

F43045E21E067188C05413187FD

(不带
\r

有没有办法解决这个问题


注:当
\r
不存在时,它也应该起作用,只有
\n
将表达式更改为

preg_match_all("!boundary=(.*)\\r?$!mi", $content, $matches);
如果存在,则应删除\r

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

有两个选项

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

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

  • 使用一个
    [^\r\n]
    否定字符类匹配任何字符,但
    \r
    \n

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

  • 或者,使用与非垂直空白(非换行符字符)的任何字符匹配的
    \V
    速记字符类的较短版本:

    看到或看到


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

    \r
    \n
    文字还是新行字符?这个解决方案因为回车仍然存在。对,我仍然在检查模式,只在
    \n
    处停止<代码>\V
    也在工作。第一个工作正常,第二个没试过。谢谢我宁愿推荐另外两个更快的选择。我从第一个开始,向大家展示你的模式是如何“固定”的。根据建议,我切换到了
    “!boundary=(\V*)!mi”
    ,这也很好
    preg_match_all("!boundary=(\V*)!mi", $content, $matches);