1

我有一段文字,内容如下:

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

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

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

4

3 回答 3

3

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

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

preg_match('#^name:\s\w{0,}\s\w{0,}#', $body, $arrNameMatches)
于 2013-01-11T19:03:12.727 回答
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)
于 2013-01-11T19:01:27.040 回答
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[非单词字符,即:换行符]和^[输入开头]。

于 2013-01-11T19:17:32.470 回答