Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Regex plus vs star difference?_Php_Regex - Fatal编程技术网

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}
    表示最多10个匹配,没有下限(即下限为0)
  • {3,}
    表示至少有3个匹配项没有上限(即上限为无穷大)
  • {,}
    表示匹配数没有上限或下限(即下限为0,上限为无穷大)
  • {5}
    正好表示4
大多数好的语言都包含缩写,正则表达式也包含缩写:

  • +
    {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]