我正在学习regexes,并找到了一些代码,所以我在我的终端上进行了测试,得到了下面的结果。
$ 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 --两个表达式输出为多行--为什么?我是新来的雷克斯,它非常令人困惑。
最后,我只想知道上述表达式或代码行的工作流程。
发布于 2018-07-07 07:00:42
首先,简要说明:
[0-9] matches exactly one digit
[0-9]* matches a sequence of digits of any length在您的例子中,3.8.0中最大的数字序列是3、8或0,因为它们是由.分隔的。
例如,如果您的版本是38.1.0,那么您将看到一个不同的地方:
[0-9] would give 3, 8, 1, 0
[0-9]* would give 38, 1, 0发布于 2018-07-07 06:59:09
[0-9.]*匹配集合0123456789.中的零个或多个字符。因此,它可以匹配整个字符串3.8.0。
[0-9]*匹配零或更多位数。因此,它可以匹配每一个数字,但必须省略点。您将得到三次匹配;每行显示一次。
[0-9]完全匹配一个数字。由于3.8.0只包含个位数,所以最后两个正则表达式的输出是相同的。这将随着像3.8.10这样的输入而改变。
发布于 2018-07-07 07:01:26
任何范围(或字符)末尾的*使其计数所有匹配范围(字符)的事件的次数为零或更多次。
例如,[0-9]* on 38.65.32将给您
38
65
32但是,同样的[0-9]会给你
3
8
6
5
3
2https://stackoverflow.com/questions/51220749
复制相似问题