我根据书本上写的东西理解有问题/.*/
,这会打印整行文本。我们知道这.
意味着任何字符,并且*
意味着前面的字符出现零次或多次。所以我希望 /.*/ 找到类似的东西rrr
qqqq
abbbbb
,我的意思是连续重复单个字符。
但这不是它所做的事情。为什么?
我的第二个问题是: 为什么/.+/
不做同样的事情?在文本中我尝试的结果是?
答案1
不,*
in 的.*
意思是“任意数量的前面的表达",即零个或多个与表达式匹配的任何类型的字符.
。
这意味着.*
将匹配aaaa
以及因为matchesabcd
中的所有字符。它还将匹配空行,因为它允许abcd
.
零火柴。
如果您想查找包含以下内容的行重复性质、用途
/\(.\)\1\1*/
该表达式匹配“任何字符,然后同一个角色,然后任意数量的相同字符”。\1*
可以说可以将其删除,除非您正在寻找包含以下内容的行:仅有的重复的字符,在这种情况下,您应该将表达式锚定到行的开头和结尾,如下所示
/^\(.\)\1\1*$/
编辑ed
器支持基本的常用表达。修饰符+
是一个扩展正则表达式修饰符。如果您使用该命令启用了错误解释,则使用时?
获得的 后面会跟有(或在 GNU 中) 。这是因为它尝试查找其中包含 a 且前面有其他字符的行。ed
/.+/
no match
No match
ed
H
+
扩展.+
正则表达式(“匹配一个或多个任意字符”)相当于基本正则表达式..*
,即“匹配一个字符,然后匹配零个或多个任意字符”。
根据它的手册,GNUed
应该支持\+
正则表达式,因此..*
相当于.\+
,但ed
我的 OpenBSD 系统上的 GNU 1.14.2 不这样做。