理解问题/.*/

理解问题/.*/

我根据书本上写的东西理解有问题/.*/,这会打印整行文本。我们知道这.意味着任何字符,并且*意味着前面的字符出现零次或多次。所以我希望 /.*/ 找到类似的东西rrr qqqq abbbbb,我的意思是连续重复单个字符。

但这不是它所做的事情。为什么?

我的第二个问题是: 为什么/.+/不做同样的事情?在文本中我尝试的结果是?

答案1

不,*in 的.*意思是“任意数量的前面的表达",即零个或多个与表达式匹配的任何类型的字符.

这意味着.*将匹配aaaa以及因为matchesabcd中的所有字符。它还将匹配空行,因为它允许abcd.火柴。

如果您想查找包含以下内容的行重复性质、用途

/\(.\)\1\1*/

该表达式匹配“任何字符,然后同一个角色,然后任意数量的相同字符”。\1*可以说可以将其删除,除非您正在寻找包含以下内容的行:仅有的重复的字符,在这种情况下,您应该将表达式锚定到行的开头和结尾,如下所示

/^\(.\)\1\1*$/

编辑ed器支持基本的常用表达。修饰符+是一个扩展正则表达式修饰符。如果您使用该命令启用了错误解释,则使用时?获得的 后面会跟有(或在 GNU 中) 。这是因为它尝试查找其中包含 a 且前面有其他字符的行。ed/.+/no matchNo matchedH+

扩展.+正则表达式(“匹配一个或多个任意字符”)相当于基本正则表达式..*,即“匹配一个字符,然后匹配零个或多个任意字符”。

根据它的手册,GNUed应该支持\+正则表达式,因此..*相当于.\+,但ed我的 OpenBSD 系统上的 GNU 1.14.2 不这样做。

相关内容