29

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

[<>]+ [<>]*

4

7 回答 7

55

它们中的每一个都是量词,星号量词(*)表示前面的表达式可以匹配零次或多次,就像{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
于 2012-05-26T07:17:19.437 回答
12

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

于 2012-05-26T05:27:33.830 回答
7

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

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

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

几乎,现代操作系统中唯一仍然默认使用 BRE 的东西是grepand sed(两者都具有 ERE 功能作为选项)和 non-vim vi

于 2012-05-26T05:27:33.833 回答
4

它们是量词。

  • +表示1 个或多个(匹配成功至少出现一次)
  • *表示0 或多个(匹配成功,无论搜索字符串是否存在)
于 2012-05-26T05:31:18.527 回答
3

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

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

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

-*[0-9]+

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

于 2012-05-26T05:32:44.380 回答
2

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

于 2012-05-26T05:30:48.963 回答
1

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

100test10
test10
test

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

于 2021-07-04T17:12:16.163 回答