2

コードの解析

$str = 'My name is Michael. I am a sportsman!';
preg_match('|My name is (.*?)\. I am a (.*?)|', $str, $m);
print_r($m);

文字列を返します:

Array ( [0] => My name is Michael. I am a [1] => Michael [2] => )

はどこsportsmanですか?

4

1 に答える 1

5

これは、式が固定されていないためです。つまり、2番目の式には(.*?)先読みが設定されていないため、何にも一致しません。次のように文字列の終わりのアンカーを追加する必要があります。

preg_match('|My name is (.*?)\. I am a (.*?)$|', $str, $m);
                                            ^

2番目の式を貪欲にすることもできます。

preg_match('|My name is (.*?)\. I am a (.*)|', $str, $m);
                                          ^
于 2013-03-22T06:58:57.287 に答える