我有一段文字,内容如下:
....text....
listname: mylistname
....text....
name: John Smith
我正在尝试获取此人的姓名,但是使用 preg_match 如下:preg_match('#name:\s\w{0,}\s\w{0,}#', $body, $arrNameMatches)
我得到“mylistname”......我可以在该模式中添加什么以便它只name:
作为一个完整的单词,从而得到“John Smith”?
因为包含与=> 名称listname:
相同的模式:name:
在开头使用^
,以便您说“字符串必须以名称开头”
preg_match('#^name:\s\w{0,}\s\w{0,}#', $body, $arrNameMatches)
在之前添加一个单词锚name
:
preg_match('#\bname:\s\w{0,}\s\w{0,}#', $body, $arrNameMatches)
或者,如果您确定name
将始终出现在输入的开头,您可以使用“输入开始”锚点,即^
:
preg_match('#^name:\s\w{0,}\s\w{0,}#', $body, $arrNameMatches)
<?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
[非单词字符,即:换行符]和^
[输入开头]。