有人可以告诉我下面示例中*
和+
运算符之间的区别:
[<>]+
[<>]*
答案 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的唯一内容是grep
和sed
(两者都具有ERE功能作为选项)和非vim vi
答案 3 :(得分:3)
*
表示前一个表达式中的零个或多个。
换句话说,表达式是可选的。
你可以定义一个这样的整数:
-*[0-9]+
换句话说,一个可选的负号后跟一个或多个数字。
答案 4 :(得分:2)
[<>]+
与[<>][<>]*
答案 5 :(得分:2)
他们是量词。
+
表示 1或多(至少有一次匹配成功)*
表示 0或许多(无论是否存在搜索字符串,匹配都会成功)答案 6 :(得分:0)
我会举一些例子来扩展上面的答案。让我们有一个文本:
100test10
test10
test
如果我们写 \d+test\d+
,这个表达式匹配 100test10
和 test10
但 \d*test\d*
匹配其中三个