假设我们有这个html内容,我们愿意用正则表达式获取Content1,Content2,..
<li>Content1</li> <li>Content2</li> <li>Content3</li> <li>Content4</li>
如果我使用下面的行
preg_match_all('/<li>(.*)<\/li>/',$text,$result);
我将得到一个包含以下单行的数组:
Content1</li> <li>Content2</li> <li>Content3</li> <li>Content4
并通过使用此代码:
preg_match_all('/<li>(.*?)<\/li>/',$result);
我将得到一个包含4行的数组,包含Content1,…
为什么(.*)不起作用,因为它意味着匹配任何字符零次或多次
*以贪婪的方式比赛,*?以非贪婪的方式比赛.
这意味着.*将匹配尽可能多的字符,包括所有中间< / li>< li>对,仅在最后一次出现的< / li>时停止.另一方面,.*?将匹配尽可能少的字符,在第一次出现< / li>时停止.