如何在字符串中首次出现preg_match

时间:2015-07-14 07:24:46

标签: php regex preg-match

我正在尝试从电子邮件正文中提取$text = "some text"; $PHPWord->addFontStyle('r2Style', array('bold'=>false, 'italic'=>false, 'size'=>12)); $PHPWord->addParagraphStyle('p2Style', array('align'=>'center', 'spaceAfter'=>100)); $section->addText($text, 'r2Style', 'p2Style'); 。以下是我到目前为止的情况:

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]"; } 任何建议的电子邮件地址吗?

1 个答案:

答案 0 :(得分:5)

你的正则表达式过于贪婪:.*匹配除换行符之外的任何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]