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

那是因为表达式没有锚定,或者更确切地说,第二个(.*?)没有前瞻集,因此不匹配);您应该像这样添加字符串结尾的锚点:

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

您还可以使第二个表达式变得贪婪:

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