(.*) 代替 (.*?)

EBA*_*BAG 8 php regex

假设我们有这个html内容,我们愿意用正则表达式获取Content1,Content2,..

<li>Content1</li>
<li>Content2</li>
<li>Content3</li>
<li>Content4</li>
Run Code Online (Sandbox Code Playgroud)

如果我使用下面的行

preg_match_all('/<li>(.*)<\/li>/', $text, $result);
Run Code Online (Sandbox Code Playgroud)

我将获得一个包含以下行的数组:

Content1</li>
<li>Content2</li>
<li>Content3</li>
<li>Content4
Run Code Online (Sandbox Code Playgroud)

并通过使用此代码:

preg_match_all('/<li>(.*?)<\/li>/', $text, $result);
Run Code Online (Sandbox Code Playgroud)

我将获得一个包含Content1,Content2,...的4行数组...

为什么(.*)不起作用,因为它意味着 match any character zero or more times

Tho*_*mas 20

*贪婪的方式*?比赛,以非贪婪的方式比赛.

这意味着.*将匹配尽可能多的字符,包括所有中间</li><li>对,仅在最后一次出现时停止</li>.另一方面,.*?将匹配尽可能少的字符,在第一次出现时停止</li>.


Mat*_*iva 6

因为.*它本身是贪婪的并且尽可能多地吃掉(即直到最后</li>),同时仍然允许模式匹配..*?另一方面,并​​不贪婪,尽可能少吃(先停下来</li>).