Regex *和+之间的差异;正则表达式

Regex *和+之间的差异;正则表达式,regex,Regex,有谁能告诉我下面示例中的*和+运算符之间的区别: []+[]**表示零或多个,而+表示一个或多个。因此,不同之处在于空字符串将匹配第二个表达式,而不是第一个表达式。+表示前一个原子的一个或多个。({1,}) *表示零或更多。除了方括号表达式中指定的字符外,这不能与任何字符匹配。({0,}) 注意,+在扩展的和Perl兼容的正则表达式中可用,而在基本RE中不可用*在所有三种RE方言中都可用。你使用的方言很可能取决于你所使用的语言 基本上,在现代操作系统中,只有grep和sed(两者都有ERE功能作

有谁能告诉我下面示例中的
*
+
运算符之间的区别:


[]+
[]*
*
表示零或多个,而
+
表示一个或多个。因此,不同之处在于空字符串将匹配第二个表达式,而不是第一个表达式。

+
表示前一个原子的一个或多个。(
{1,}

*
表示零或更多。除了方括号表达式中指定的字符外,这不能与任何字符匹配。(
{0,}

注意,
+
在扩展的和Perl兼容的正则表达式中可用,而在基本RE中不可用<代码>*在所有三种RE方言中都可用。你使用的方言很可能取决于你所使用的语言

基本上,在现代操作系统中,只有
grep
sed
(两者都有ERE功能作为一个选项)和非vim
vi

[]+
[]*
相同,它们是量词

  • +
    表示1或多个(至少一次匹配成功)
  • *
    表示0或多个(无论搜索字符串是否存在,匹配都会成功)

*
表示前面表达式的零个或多个

换句话说,表达式是可选的

您可以定义如下所示的整数:

-*[0-9]+


换句话说,一个可选的负号后跟一个或多个数字。

它们中的每一个都是量词,星号量词(
*
)意味着前面的表达式可以匹配零次或多次,就像
{0,}
,而加号量词(
+
)指示前面的表达式必须至少匹配一次或多次,并且与
{1,}
相同

因此,总结一下:

a*  ---> a{0,}  ---> Match a or aa or aaaaa or an empty string
a+  ---> a{1,}  ---> Match a or aa or aaaa but not a string empty

和。那些运算符被称为“Quantifier”stema,我希望我能否决你的评论。stackoverflow的目的是快速获得答案,而不是阅读更多文档。你还不如回答lmgtfy。这个问题在google上出现为#1,当搜索“regex difference between*and+”时,这个答案被添加到“Quantifiers”下,我没有看到任何与空字符串@AleRoot匹配的结果是相同的,不是相反吗
*
将匹配空,但
+
将不匹配。我相信Ismail指的是OP的示例模式(
[]+
[]*
),而不是本答案中讨论的量词顺序。我同意,这有点模棱两可。