(.*?)这个匹配的是什么
(.*?)这个匹配的是什么
$subject = "abcaaaaaaaaaadef";
$pattern = '/a.*?d/';
preg_match($pattern, $subject, $matches);
print_r($matches);
//在这种情况下,.*会一直匹配,加了?后,变成非贪婪模式,?后跟的是d,所以会匹配至d结束
//运行结果是
Array ( [0] => abcjhjkhhljkhd )
加了()小括号之后,会再一次输出小括号中匹配的内容
$subject = "abcjhjkhhljkhdef";
$pattern = '/a(.*?)d/';
preg_match($pattern, $subject, $matches);
print_r($matches);
结果为:
Array ( [0] => abcjhjkhhljkhd [1] => bcjhjkhhljkh )
我看的时候也被这个问题困扰了,不晓得现在的理解对不对,加油,共勉。
.点号字符, 匹配任何单个字符(除换行符外)。
*号字符,匹配0或多次匹配,意思是要么不匹配,要么匹配多次,点号与星号.*在一起是匹配人任意数量的除换行符之外的字符。
?问号字符,作为量词,表示 0 次或 1 次匹配。位于量词后面用于改变量词的贪婪特性。重要的是在量次后面改变其贪婪属性,前面的*是量次,且是贪婪属性,后面跟问号?,则变化成非贪婪属性,则尽可能少的匹配,也就是从之前的匹配任意数量的字符(仍然是换行符除外)变为了0次或一次匹配,匹配成功就一次,匹配失败就0次。
()圆括号,举例说明,eg: a(b)c,在这个例子中,用abcac来进行匹配的话,可以得到ac,abc两个结果,意思是小括号中的内容在能匹配的情况下是需要匹配的,匹配不到内容也可以跳过。
以上是我的理解,谢谢!
举报