2013-03-22 33 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