解析代码
$str = 'My name is Michael. I am a sportsman!';
preg_match('|My name is (.*?)\. I am a (.*?)|', $str, $m);
print_r($m);
Run Code Online (Sandbox Code Playgroud)
返回我的字符串:
Array ( [0] => My name is Michael. I am a [1] => Michael [2] => )
Run Code Online (Sandbox Code Playgroud)
在哪里sportsman?
那是因为表达式没有锚定,或者更确切地说,第二个(.*?)没有预见集,因此没有匹配); 你应该像这样添加字符串结尾锚点:
preg_match('|My name is (.*?)\. I am a (.*?)$|', $str, $m);
^
Run Code Online (Sandbox Code Playgroud)
你也可以使第二个表达式贪婪:
preg_match('|My name is (.*?)\. I am a (.*)|', $str, $m);
^
Run Code Online (Sandbox Code Playgroud)