【问题标题】:How to preg_match first occurrence in a string如何preg_match字符串中的第一次出现
【发布时间】:2015-07-14 07:24:46
【问题描述】:

我正在尝试从电子邮件正文中提取 From:address。这是我目前所拥有的:

$string = "From: user1@somewhere.com This is just a test.. the original message was sent From: user2@abc.com";

$regExp = "/(From:)(.*)/";
$outputArray = array();
if ( preg_match($regExp, $string, $outputArray) ) {
print "$outputArray[2]";
}

我想得到From: ..第一次出现的电子邮件地址有什么建议吗?

【问题讨论】:

    标签: php regex preg-match


    【解决方案1】:

    您的正则表达式太贪心:.* 匹配除换行符之外的任何 0 个或多个字符,尽可能多地。此外,围绕文字值使用捕获组是没有意义的,它会产生不必要的开销。

    使用以下正则表达式:

    ^From:\s*(\S+)
    

    ^ 确保我们从字符串的开头开始搜索,From: 匹配字面字符序列,\s* 匹配可选空格,(\S+) 捕获 1 个或多个非空白符号。

    sample code:

    <?php
    $string = "From: user1@somewhere.com This is just a test.. the original message was sent From: user2@abc.com";
    
    $regExp = "/^From:\s*(\S+)/";
    $outputArray = array();
    if ( preg_match($regExp, $string, $outputArray) ) {
    print_r($outputArray[1]);
    }
    

    您要查找的值在 $outputArray[1] 内。

    【讨论】:

      猜你喜欢
      • 2013-10-04
      • 2013-12-15
      • 2020-05-22
      • 1970-01-01
      • 2018-02-05
      • 1970-01-01
      • 2012-06-09
      • 1970-01-01
      相关资源
      最近更新 更多