1

我想了解以下3个正则表达式之间的区别:

我想显示文件中仅包含小写字母的所有行。

以下是我尝试的 3 个正则表达式:

cat filename.txt | grep ^[a-z]*

正则表达式描述:这将显示以 0 个或多个小写字母开头的所有行。因此,它将匹配以下任一项:

zapato
113078
OLIVIA

不完全是我们想要的。

cat filename.txt | grep ^[a-z]*$

正则表达式描述:这将显示以 0 个或多个小写字母开头的所有行,直到行尾。这符合以下条件:

fubuki
BALLIN
Kristine

这次没有包含数字的结果。

cat filename.txt | grep ^[a-z]*[a-z]$

正则表达式描述:这对我很有效。它搜索以 0 个或多个小写字母开头的所有行,并匹配它直到找到另一个小写字母。出于某种原因,这对我有用。但是,我想知道这与以前的正则表达式有何不同。

tonia
ecurby
totonno

另外,当正则表达式中的星号()表示,0或更多时,那么它应该包括我写的所有结果,^[az]

4

1 回答 1

4

正则表达式的简短说明:

^[a-z]*

匹配以 0 个或多个字符开头的字符串[a-z]
匹配字符串和以 set字符开头的[a-z]每个字符串。


^[a-z]*$

匹配仅包含 0 个或多个字符的字符串[a-z]
匹配字符串和包含set 字符的每个字符串[a-z]


^[a-z]*[a-z]$

匹配以 0 个或多个字符开头的字符串,[a-z]后跟恰好最后一个字符 from [a-z]
匹配每个包含set 字符的非空字符串。[a-z]


使用它而不是您当前的第三个选项:

^[a-z]+$

它在语义上是等价的,但更简单。

表达式x*x(or xx*) 等价x+于正则表达式 (withx是任何表达式)。后者基本上只是前者更冗长的表达式的语法糖。

或者换一种说法:while*表示0 或更多+表示1 或更多


于 2012-06-24T19:03:59.703 回答