Php Regex plus vs star difference?
以下两者之间的区别是什么:Php Regex plus vs star difference?,php,regex,Php,Regex,以下两者之间的区别是什么: (.+?) 及 当我在phppreg\u matchregex?+中使用它时,*也可以是零。第一个(+)是一个或多个字符。第二个(*)是零个或多个字符。两者都是非贪婪的(?),并且匹配任何东西()。一个+匹配前面模式的一个或多个实例。*匹配前面模式的零个或多个实例 因此,基本上,如果使用+模式,必须至少有一个实例,如果使用*模式,如果没有实例,它仍将匹配。+至少匹配一个字符 *匹配任意数量(包括0)的字符 ?表示惰性表达式,因此它将匹配尽可能少的字符。它们被称为量词
(.+?)
及
当我在php
preg\u match
regex?+
中使用它时,*
也可以是零。第一个(+
)是一个或多个字符。第二个(*
)是零个或多个字符。两者都是非贪婪的(?
),并且匹配任何东西(
)。一个+
匹配前面模式的一个或多个实例。*
匹配前面模式的零个或多个实例
因此,基本上,如果使用
+
模式,必须至少有一个实例,如果使用*
模式,如果没有实例,它仍将匹配。+
至少匹配一个字符
*
匹配任意数量(包括0)的字符
?
表示惰性表达式,因此它将匹配尽可能少的字符。它们被称为量词
*
前面表达式的0个或多个
+
1个或多个前面的表达式
默认情况下,量词是贪婪的,这意味着它匹配尽可能多的字符
量词更改行为以使该量词“ungreedy”后的?
,意味着它将尽可能少地匹配
示例贪婪/不贪婪
例如字符串“abab”
a.*b
将匹配“abab”(preg\u match\u all将返回一个匹配,即“abab”)
而a.*b
将只匹配起始的“ab”(preg\u match\u all将返回两个匹配,“ab”)
您可以在线测试您的正则表达式,例如在Regexr上,星形与加号非常相似,唯一的区别是加号匹配前面的一个或多个字符/组,而星形匹配0个或多个。请考虑下面要匹配的字符串
ab
模式(ab.*)
将返回与捕获组匹配的结果ab
而模式(ab.+)
将不匹配且不返回任何内容
但是如果您将字符串更改为follow,它将返回模式(ab.+)
我认为前面的答案没有突出一个简单的例子: 例如,我们有一个数组:
numbers = [5, 15]
以下正则表达式^[0-9]+
匹配:15
。
但是,
^[0-9]*
同时匹配5和15
。不同之处在于,+
运算符需要至少一个重复的前面的正则表达式在正则表达式中,{i,f}
表示“在i
到f
匹配之间”。让我们来看看下面的例子:
表示3到7次匹配{3,7}
表示最多10个匹配,没有下限(即下限为0){,10}
表示至少有3个匹配项没有上限(即上限为无穷大){3,}
表示匹配数没有上限或下限(即下限为0,上限为无穷大){,}
正好表示4{5}
是+
{1,}
是*
{,}
是?
{,1}
+
至少需要1个匹配项,*
接受任意数量的匹配项或根本不接受任何匹配项,?
接受的匹配项不超过1个或零个
信用证:Codecademy.com这取决于是否设置了s修饰符。“lazy”是“ungreedy”更常见的术语。示例不正确。
(.+?)
和(.*?)
在正则表达式的不同位置上表现不同,这些正则表达式是a(+?)
,(.+?)b
,a(+?)b
,a(+?)
,a(+?).b
。为什么a.*b不返回“ab”?它不是说“单词在a和b之间,0个或更多字符”,所以ab在和之间没有字符,可能是匹配的。为什么这是不正确的?@HelloWorld,这与我上面解释的贪婪有关<代码>*将尽可能匹配。如果你想尽早停下来,那么你就必须把它取消冻结。*?我认为这是一个更好的答案,特别是对于+vs*“+是最小的一个”
这句话是什么意思?
aba
numbers = [5, 15]