2013-01-11 31 views
1

我,有讀取類似文本:PHP的preg_match:得到一個完整的字

....text.... 
listname: mylistname 
....text.... 
name: John Smith 

我想獲得的人的名字,但使用的preg_match類似如下:preg_match('#name:\s\w{0,}\s\w{0,}#', $body, $arrNameMatches)

我得到「mylistname」...我可以添加到該模式,以便它僅獲得name:作爲完整的單詞,因此獲得'約翰史密斯'?

回答

2

name前添加一個字錨:

preg_match('#\bname:\s\w{0,}\s\w{0,}#', $body, $arrNameMatches) 

另外,如果你確信name總是會發生在輸入的開始,您可以使用「開始輸入」錨,即^

preg_match('#^name:\s\w{0,}\s\w{0,}#', $body, $arrNameMatches) 
+0

第一個適用於這種情況:) – luqita

3

由於listname:包含相同的圖案name: =>名:

使用^一開始讓你說「的字符串必須以名字開始」

preg_match('#^name:\s\w{0,}\s\w{0,}#', $body, $arrNameMatches) 
+1

不是這個詞,_input_。正則表達式沒有詞的概念。 – fge

0
<?php 
$body = <<<_EOF 
listname: List of Jerks 
name: John Smith 
name: Ted Danson 
name: Buddy Holly 
_EOF; 

preg_match_all('/\bname: ([A-Za-z ]*)/', $body, $arrNameMatches); 
print_r($arrNameMatches[1]); 

輸出:

Array 
(
    [0] => John Smith 
    [1] => Ted Danson 
    [2] => Buddy Holly 
) 

\b相當於匹配\W [非單詞字符,即:newlines]和^ [輸入開始]。