2010-10-30 52 views
0

好的,所以^[A-Z]表示以大写字母开头。那么^[A-Z]*是什么意思?这是否意味着大写字母不会出现零次或多次?因为它包含输出中不是大写字母的空行,所以我真的很困惑。另外,你能解释^[A-Z]*$吗?对此正则表达式感到困惑

mugbear:~# clear 
mugbear:~# cat emptyspace 
line1 
line2 

line4 
line5 

line7 
mugbear:~# grep '^[A-Z]*' emptyspace            
line1 
line2 

line4 
line5 

line7 
mugbear:~# grep '^[A-Z]*$' emptyspace 


mugbear:~# 
+0

通常情况下,如果您要询问其他完全不同的问题,最好在关闭电流后提出一个新问题。 – greg 2010-10-30 03:24:55

+0

Greg,我会这么做的。 – Strawberry 2010-10-30 03:38:52

回答

2

一个空行或多次出现大写字母。后面的表达式是 含糊不清,以 或更多出现的大写字母开头和结尾,也被称为“任何东西”。

更新:请参考Tanzelax的答案作为应该被接受的答案。

+0

这是愚蠢的,我甚至写出来,它甚至没有正确处理我的大脑。谢谢。 – Strawberry 2010-10-30 03:03:11

+0

星期五晚上,错误肯定会发生;)请随时接受正确的答案。 – greg 2010-10-30 03:11:32

+0

更新了我的回答,以回答您的其他问题。 – greg 2010-10-30 03:25:32

1

零次或多次出现次数可以包括零次出现次数。

因此,^[A-Z]*仅包括“新行”,即每一行。

$是行尾,所以^[A-Z]*$表示'新行,后面跟着大写字母的任意数字(包括零),后面跟着'行结束',它只是空行(是'新行,零大写字母,行尾“)。

+0

事实并非如此,'^ [A-Z] * $'将匹配任何内容,不仅包括换行符,大写字母和EOL。 “AaA”以零个或多个大写字母以及“aaa”开头和结尾。 – greg 2010-10-30 03:07:48

+0

@greg,我建议你把你的理论付诸实践。你的陈述是不正确的。 – tchrist 2010-10-30 04:13:32

+0

@tchrist谢谢。我评论的其实是完全不正确的。由于*应用于字符集(**零**或更多),所以会捕获“空白”行。这个正则表达式将会捕获所有大小写内容。由于标记的“*”部分首先与空白匹配,因此我的示例没有被匹配为模式。 – greg 2010-10-30 15:02:54

1

如果你问什么在表达式末尾添加了星号,它意味着匹配0次或更多次。在你提供的表达中,它意味着尽可能多地匹配大写字母。

http://www.regular-expressions.info/也可能对您有所帮助。