有人能告诉我下面示例中
*
和 +
运算符的区别吗?
[<>]+
表示匹配一个或多个 <>
符号。
[<>]*
表示匹配零个或多个 <>
符号。它们都是量词,星号量词(*
)表示前面的表达式可以匹配零次或多次,就像 {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
*
表示零个或多个,+
表示一个或多个。所以两者的区别在于空字符串可以匹配第二个表达式,但不能匹配第一个表达式。
*
可以匹配空值,但是+
不能。 - Joshua Plicque[<>]+
和[<>]*
),而不是在这个答案中讨论的量词顺序。 我同意,它有点模棱两可。 - mickmackusa+
表示前一个元素出现一次或多次。({1,}
)
*
表示零次或多次匹配。除了在方括号表达式中指定的字符外,此模式还可以匹配空字符串。({0,}
)
请注意,+
在扩展和 Perl 兼容正则表达式中可用,并且在基本正则表达式中不可用。*
可在所有三种 RE 方言中使用。您使用的方言最有可能取决于您所在的语言。
现代操作系统中仅有默认使用BRE的是grep 和 sed(两者都具有ERE选项功能),以及非vim的 vi。
*
代表前一个表达式可以出现零次或者多次。
换句话说,该表达式是可选的。
你可以像这样定义一个整数:
-*[0-9]+
也就是说,可选的负号后面跟着一或多个数字。
它们是量词。
+
表示 1 或 多个 (至少一次匹配才能成功)*
表示 0 或 多个 (不管搜索字符串是否存在,匹配都成功)[<>]+
is same as [<>][<>]*
我将举例来扩展上面的答案。假设我们有一段文本:
100test10
test10
test
\d+test\d+
,则该表达式匹配100test10
和test10
,但\d*test\d*
与它们三个都匹配。