PHP可以用两种方式来开启贪婪模式的匹配。
1.U模式修饰符
$str = '<td>香肠</td><td>月饼</td>';
preg_match_all('/<td>(.*)<\/td>/U',$str,$matches);
var_dump($matches);
结果:
array (size=2)
0 =>
array (size=2)
0 => string '<td>香肠</td>' (length=15)
1 => string '<td>月饼</td>' (length=15)
1 =>
array (size=2)
0 => string '香肠' (length=6)
1 => string '月饼' (length=6)
2.括号中添加?
$str = '<td>香肠</td><td>月饼</td>';
preg_match_all('/<td>(.*?)<\/td>/',$str,$matches);
var_dump($matches);die;
结果跟第一种一致。
忽略换行
有的时候,因为要匹配的内容中有换行,导致了匹配不到或不能正常匹配,最后得知在表达式前边添加 (?s)
即可忽略换行符,完美匹配
举个栗子:
$detail = "<li>地址:
水产西路688号
</li>";
如果写成下面这样是匹配不到的
preg_match_all('/<li>(.*)<\/li>',$detail,$add);
正确的写法:
preg_match_all('/(?s)<li>(.*)<\/li>',$detail,$add);
https://www.codenong.com/29133617/