2013-03-22 18 views
2

解析代码PHP:`的preg_match我eats`串

$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

回答

5

这是因为表达式没有锚定,或者说,第二个(.*?)没有预先设置,因此没有匹配);你应该添加结束串锚这样的:

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

你也可以将第二个表达式的贪婪:

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

或者,这是因为第二部分是不贪婪,所以为什么锚点是需要的。如果你让它贪婪(即'(。*)|'),它将匹配而不锚定表达式。 – Jon 2013-03-22 07:07:22

+0

@Jon完全正确:)添加到我的答案。 – 2013-03-22 07:11:51