我正在学习正则表达式,它们分为基本和扩展。
基本正则表达式(BRE)使用元字符[ ] ^ $ . *
。
它在grep
命令下工作得很好。但是,当我们使用ls
,echo
或其他命令时,它也可以很好地工作。(例如,ls -al [abc]*.txt
)
但是,当我学习有关路径名扩展的部分时,它使用 BRE 的元字符。
所以,我认为它们是一样的。对吗?
答案1
路径名扩展^
、$
、 或没有任何特殊含义.
。
*
BRE 中的字符或组匹配零次或多次重复(因此a*
→、
a
、aa
、aaa
、 …)。*
在路径名扩展中匹配任何字符串,与前一个字符无关(所以a*
→a
,ab
,a !!! and any ?? string whatsoever
, ... -笔记:它与 BRE 所匹配的空字符串不匹配a*
)。同样对于?
.- in 的否定
[]
是通过 BRE 中的前导和路径名扩展中的^
前导实现的。!
.
匹配 BRE 中的任何字符,而.
在路径名中没有特殊意义图案。它确实具有重要意义 匹配的,但不在模式本身中。
除了一些表面上的相似之处之外,它们还有很大的不同。有些事情在 BRE 中是可能的,但在路径名匹配中是不可能的(例如,尝试匹配仅由a
s 组成的文件名)。