regular expression (Linux)中 * 的含义, 请举例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了regular expression (Linux)中 * 的含义, 请举例相关的知识,希望对你有一定的参考价值。

如果我输入:1,$ s/^ *$//
我得到的结果是什么?谢谢!

这个应该是 vim 中的替换吧,

1,$  -> 从第一行到最后一行
s     -> 做替换操作
/     -> 模式匹配开始
^    -> 从每一行的开头
  *   -> 匹配0个或者多个空格 (*前面有空格)
$    -> 到一行的结尾
/    -> 模式匹配结束
     -> (替换的内容)空
/   ->  替换的内容结束


如果你不太明白的话, 要看看相应的语法, 而不仅是 正则表达式.

上面的解释, 白话一点就是:

把 每一行中只有0个或者多个空格的行 替换成 空(什么也没有),

换句话说: 

删除空行

针对你的问题:

*的含义:

* 在正则中表示 0个或者多个,
比如, a后面跟着一个*, 表示 能匹配 0个或者 多个a.

追问

我一直不能理解 * 的含义, 如果是代表0个或多个,不就是表示包含全部吗?那么这句话的意思就因该是把整篇文档替换成空。 为什么不能直接
:1,$ d

追答

正则表达式中的 * 和 平时认为的 通配符是不一样的, 

平时 我们说 * 可以通配所有

但正则中, * 只是表示 数量, 它前面是什么, 就表示 匹配 任意数量的[前面的字符]


比如一个文件中:

a
aa
aaa

如果你用

a* 来匹配, 这三行 都可以匹配到,

但是

如果只用 *, 那就是错误的, 语法都不对. * 之前 必须要指定[某种东西]

参考技术A 正常解释是匹配前面的子表达式零次或多次
你这里可以理解匹配零个或多个空格。

以上是关于regular expression (Linux)中 * 的含义, 请举例的主要内容,如果未能解决你的问题,请参考以下文章

regular expression (Linux)中 * 的含义, 请举例

linux sed 替换

python 中 正则表达式(Regular Expressions)学习

regular expression

[Regular Expressions] Find Repeated Patterns

LeetCode 10. Regular Expression Matching