我有一个类似的文字:
....text....
listname: mylistname
....text....
name: John Smith
我正在尝试获取此人的姓名,但是使用preg_match,如下所示:preg_match('#name:\s\w{0,}\s\w{0,}#', $body, $arrNameMatches)
我得到“mylistname”...我可以添加到该模式中,以便只将name:
作为一个完整的单词,从而获得“John Smith”?
答案 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
[非单词字符,即:换行符]和^
[输入开头]。