【发布时间】:2012-06-01 14:11:30
【问题描述】:
谁能告诉我下面示例中* 和+ 运算符之间的区别:
[<>]+[<>]*
【问题讨论】:
-
stema,我希望我可以否决您的评论。 stackoverflow 的目的是快速获得答案,而不是阅读更多文档。您可能已经回答了 lmgtfy。在寻找“* 和 + 之间的正则表达式差异”时,这个问题在谷歌上排名第一
标签: regex
谁能告诉我下面示例中* 和+ 运算符之间的区别:
[<>]+[<>]*
【问题讨论】:
标签: regex
每一个都是量词,星号量词(*)表示前面的表达式可以匹配0次或多次,就像{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 和 sed(两者都具有 ERE 功能作为选项)和非 vim vi。
【讨论】:
它们是量词。
+ 表示 1 或多个(匹配成功至少出现一次)* 表示 0 或多个(匹配成功,无论搜索字符串是否存在)【讨论】:
* 表示前面的表达式的零个或多个。
换句话说,表达式是可选的。
你可以这样定义一个整数:
-*[0-9]+
换句话说,一个可选的负号后跟一个或多个数字。
【讨论】:
[<>]+ 与[<>][<>]* 相同
【讨论】:
我将举一些例子来扩展上面的答案。让我们有一个文本:
100test10
test10
test
如果我们写\d+test\d+,这个表达式匹配100test10和test10,但\d*test\d*匹配其中三个
【讨论】: