谁能告诉我下面示例中的*
和+
运算符之间的区别:
[<>]+
[<>]*
它们中的每一个都是量词,星号量词(*
)表示前面的表达式可以匹配零次或多次,就像{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,}
)
*
表示零个或多个。除了方括号表达式中指定的字符之外,这不能匹配任何内容。( {0,}
)
请注意,+
它在扩展和 Perl 兼容的正则表达式中可用,但在 Basic RE 中不可用。 *
在所有三种 RE 方言中都可用。您使用的方言很可能取决于您使用的语言。
几乎,现代操作系统中唯一仍然默认使用 BRE 的东西是grep
and sed
(两者都具有 ERE 功能作为选项)和 non-vim vi
。
它们是量词。
+
表示1 个或多个(匹配成功至少出现一次)*
表示0 或多个(匹配成功,无论搜索字符串是否存在)*
表示前一个表达式的零个或多个。
换句话说,表达式是可选的。
你可以像这样定义一个整数:
-*[0-9]+
换句话说,一个可选的负号后跟一个或多个数字。
[<>]+
和[<>][<>]*
我将举一些例子来扩展上面的答案。让我们有一个文本:
100test10
test10
test
如果我们写\d+test\d+
,这个表达式匹配100test10
并且匹配test10
其中\d*test\d*
三个