php Regex plus与星星的区别?[副本]

ivqmmu1c  于 2023-10-15  发布在  PHP
关注(0)|答案(9)|浏览(92)

这个问题已经有答案了

Reference - What does this regex mean?(1个答案)
两年前关门了。
以下两者之间的区别是什么:

(.+?)

(.*?)

当我在我的php preg_match regex中使用它时?

dohp0rv5

dohp0rv51#

它们被称为量词。
*前面表达式的0个或多个
+前面表达式的1个或多个
默认情况下,量词是贪婪的,这意味着它匹配尽可能多的字符。
量词后的?改变了行为,使这个量词“不贪婪”,这意味着它将尽可能少地匹配。

示例贪婪/不贪婪

例如,在字符串“abab”上
a.*b将匹配“abab”(preg_match_all将返回一个匹配,即“abab”)
a.*?b将只匹配开始的“ab”(preg_match_all将返回两个匹配,“ab”)
你可以在线测试你的正则表达式,例如。在Regexr、see the greedy example here

7rfyedvj

7rfyedvj2#

第一个(+)是 * 一个或多个字符 *。第二个(*)是 * 零个或多个字符 *。
两者都有贪婪(默认)和懒惰(?)变体

/d+?
/d*?
yrwegjxp

yrwegjxp3#

在RegEx中,{i,f}表示“if之间的匹配”。我们来看一下以下例子:

  • {3,7}表示3到7个匹配项
  • {,10}表示最多10场比赛,没有下限(即下限为0)
  • {3,}表示至少3次匹配,没有上限(即上限为无穷大)
  • {,}表示匹配数量没有上限或下限(即,下限为0,上限为无穷大)
  • {5}表示4

大多数好的语言都包含缩写,RegEx也是如此:

  • +{1,}的简写
  • *{,}的简写
  • ?{,1}的简写

这意味着+需要至少1个匹配,而*接受任何数量的匹配或根本没有匹配,?接受不超过1个匹配或零个匹配。
图片来源:Codecademy.com

hxzsmxv2

hxzsmxv24#

+至少匹配一个字符
*匹配任意数量(包括0)的字符
?表示一个惰性表达式,因此它将匹配尽可能少的字符。

rxztt3cl

rxztt3cl5#

+匹配前面模式的一个或多个示例。*匹配前面模式的零个或多个示例。
所以基本上,如果你使用+,那么必须至少有一个模式的示例,如果你使用*,如果没有它的示例,它仍然会匹配。

rt4zxlrg

rt4zxlrg6#

下面是要匹配的字符串。

ab

模式(ab.*)将返回捕获组的匹配结果ab
而模式(ab.+)将不匹配,不返回任何东西。
但如果将字符串更改为following,它将返回(ab.+)模式的aba

aba
2exbekwf

2exbekwf7#

+是最小值,*也可以是零。

noj0wjuj

noj0wjuj8#

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

njthzxwz

njthzxwz9#

我认为前面的答案没有突出一个简单的例子:
例如,我们有一个数组:

numbers = [5, 15]

以下正则表达式^[0-9]+匹配:15仅限。但是,^[0-9]*5 and 15都匹配。不同之处在于+运算符要求前面的正则表达式至少有一个 * 重复**

相关问题