PHP preg_match:得到一个完整的单词

时间:2013-01-11 18:59:16

标签: php regex

我有一个类似的文字:

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

我正在尝试获取此人的姓名,但是使用preg_match,如下所示:preg_match('#name:\s\w{0,}\s\w{0,}#', $body, $arrNameMatches)

我得到“mylistname”...我可以添加到该模式中,以便只将name:作为一个完整的单词,从而获得“John Smith”?

3 个答案:

答案 0 :(得分:3)

因为listname:包含与name: =>相同的模式名:

在开头使用^,以便您说“字符串必须以名称开头”

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

答案 1 :(得分: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)

答案 2 :(得分: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 [非单词字符,即:换行符]和^ [输入开头]。