正则expression式加上星星的区别?

有什么区别:

(.+?) 

 (.*?) 

当我在我的PHP preg_match正则expression式中使用它?

他们被称为量词。

* 0或更多的前面的expression式

前面的expression式+ 1或更多

默认情况下,一个量词是贪婪的,这意味着它匹配尽可能多的字符。

这个? 量词改变行为后使这个量词“不确定”,意味着它会尽可能less地匹配。

示例贪婪/ ungreedy

例如在string“ abab

a.*b将匹配“abab”(preg_match_all将返回一个匹配,“abab”)

a.*?b只会匹配开始的“ab”(preg_match_all将返回两个匹配,“ab”)

你可以在线testing你的正则expression式,例如Regexr, 看到这里的贪婪的例子

第一个( + )是一个或多个字符 。 第二个( * )是零个或多个字符 。 两者都是非贪婪的( ? )并匹配任何东西( . )。

+是最小的一个, *也可以是零。

A +匹配前一个模式的一个或多个实例。 A *匹配前面的模式的零个或多个实例。

所以基本上,如果你使用+那么必须至less有一个模式的实例,如果你使用* ,如果没有它的实例,它仍然会匹配。

+至less匹配一个字符

*匹配任何数字(包括0)的字符

这个? 表示一个懒惰的expression,所以它会匹配尽可能less的字符。

星号与加号非常相似,唯一的区别是加号匹配1个或多个前一个字符/组时,起始匹配0或更多。

考虑下面是匹配的string。

 ab 

模式(ab.*)将返回捕获组的匹配结果ab

模式(ab.+)不匹配,不返回任何内容。

但是,如果将string更改为跟随,则将返回模式(ab.+) aba

 aba 

我认为以前的答案没有突出一个简单的例子:

例如我们有一个数组:

 numbers = [5, 15] 

以下正则expression式^[0-9]+仅匹配: 15 。 但是, ^[0-9]*5 and 15都匹配。 不同的是, +运算符至less需要一个前面的正则expression式的副本