*和+正则表达式之间的区别

时间:2012-05-26 05:25:51

标签: regex

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

[<>]+ [<>]*

7 个答案:

答案 0 :(得分:36)

每个都是量词,星形量词(*)表示前面的表达式可以匹配零次或多次,就像{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

答案 1 :(得分:11)

*表示零或多,+表示一个或多个。所以区别在于空字符串与第二个表达式匹配,但不匹配第一个表达式。

答案 2 :(得分:5)

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

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

请注意+在扩展和Perl兼容的正则表达式中可用,并且在Basic RE中不可用。所有三种RE方言都提供*。你正在使用的那种方言很可能取决于你所使用的语言。

相当多,现代操作系统中仍然默认为BRE的唯一内容是grepsed(两者都具有ERE功能作为选项)和非vim vi

答案 3 :(得分:3)

*表示前一个表达式中的零个或多个。

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

你可以定义一个这样的整数:

-*[0-9]+

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

答案 4 :(得分:2)

[<>]+[<>][<>]*

相同

答案 5 :(得分:2)

他们是量词。

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

答案 6 :(得分:0)

我会举一些例子来扩展上面的答案。让我们有一个文本:

100test10
test10
test

如果我们写 \d+test\d+,这个表达式匹配 100test10test10\d*test\d* 匹配其中三个