1

私は、次のようなテキストを持っています:

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

人の名前を取得しようとしていますが、次のようにpreg_matchを使用しています。preg_match('#name:\s\w{0,}\s\w{0,}#', $body, $arrNameMatches)

「mylistname」を取得します...そのパターンに何を追加してname:、完全な単語としてのみ取得し、「JohnSmith」を取得できますか?

4

3 に答える 3

3

=> namelistname:と同じパターンが含まれているため: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 に答える