首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[0-9]*和[0-9]之间的差异

[0-9]*和[0-9]之间的差异
EN

Stack Overflow用户
提问于 2018-07-07 06:54:13
回答 4查看 11.2K关注 0票数 1

我正在学习regexes,并找到了一些代码,所以我在我的终端上进行了测试,得到了下面的结果。

代码语言:javascript
复制
$ echo "my version 3.8.0" | grep -o '[0-9.]*'
3.8.0
$ echo "my version 3.8.0" | grep -o '[0-9]*'
3
8
0
$ echo "my version 3.8.0" | grep -o '[0-9]'
3
8
0

为什么最后两个表达式提供相同的输出,所以我想知道怎么做?还有一件事,第一个表达式输出在一行,其中rest --两个表达式输出为多行--为什么?我是新来的雷克斯,它非常令人困惑。

最后,我只想知道上述表达式或代码行的工作流程。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-07-07 07:00:42

首先,简要说明:

代码语言:javascript
复制
[0-9] matches exactly one digit
[0-9]* matches a sequence of digits of any length

在您的例子中,3.8.0中最大的数字序列是380,因为它们是由.分隔的。

例如,如果您的版本是38.1.0,那么您将看到一个不同的地方:

代码语言:javascript
复制
[0-9] would give 3, 8, 1, 0
[0-9]* would give 38, 1, 0
票数 1
EN

Stack Overflow用户

发布于 2018-07-07 06:59:09

代码语言:javascript
复制
[0-9.]*

匹配集合0123456789.中的零个或多个字符。因此,它可以匹配整个字符串3.8.0

代码语言:javascript
复制
[0-9]*

匹配零或更多位数。因此,它可以匹配每一个数字,但必须省略点。您将得到三次匹配;每行显示一次。

代码语言:javascript
复制
[0-9]

完全匹配一个数字。由于3.8.0只包含个位数,所以最后两个正则表达式的输出是相同的。这将随着像3.8.10这样的输入而改变。

票数 1
EN

Stack Overflow用户

发布于 2018-07-07 07:01:26

任何范围(或字符)末尾的*使其计数所有匹配范围(字符)的事件的次数为零或更多次。

例如,[0-9]* on 38.65.32将给您

代码语言:javascript
复制
38
65
32

但是,同样的[0-9]会给你

代码语言:javascript
复制
3
8
6
5
3
2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51220749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档