PHP正则表达式贪婪模式

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/

发表评论

邮箱地址不会被公开。 必填项已用*标注