| |
Explain 1:
1、正则表达式是用来匹配字符串的,这个就不解释了
2、通配符是用来通配的,也就是shell在做Pathname Expansion时用到的
Explain 2:
通配符,说白了一般只用于文件名匹配,它是由shell解析的。所谓的系统level的概念非常含糊,什么是系统level的?我们知道shell是一个命令解释器,它是内核的外壳,用于完成操作系统使用者与内核的沟通,因此,通配符实际上就是一个shell解释器去解析的符号,它的特殊涵义是由shell这个命令解释器赋予的。通配符的英文名是wildcard,就是万用牌的意思,它相当简单,一般来说,*nix系统上面的shell大多将三个特殊符号当作通配符,它们是 * ? [...], 其中 * 表示匹配任意长度的任意字符; ? 表示匹配一个任意字符, 而[...]则表示匹配括号中列出的字符中的任意一个。
其次。什么是正则表达式(regular expression, 缩写是regex.)?从简单的角度去理解,你可以把正则表达式看成是一种字符串匹配模式标准。这里最重要的就是,它本身,只是一种业界流行的标准,或者说,它是相当于对字符串匹配模式的一种规定。这种规定是随着相关的工具软件的发展而自称体系的“不成文规矩”。
-- 举个例子好了。假设首先有一种工具软件能够根据“模式(pattern)”搜索字符串,这个工具非常流行,以至于后续的工具软件都效仿那个工具软件定义的模式规则来匹配字符串 -- 慢慢的就形成标准,而且相对来说是一种不成文的规矩.
所以,正则表达式是什么? -- 它是一种对字符串匹配模式的描述和规定 -- 并且是一种标准。而不同的工具程序,也就是egrep、sed、awk这样的程序,以各种程度来支持这种字符串搜索模式,它们就是标准的实现,你可以在这种软件中使用正则表达式这种“匹配模式标准”。 -- 明白?
所以,在什么地方使用通配符?答案是只要是shell命令行或者shell脚本中,你都可以使用通配符;
在什么地方使用正则表达式?当你使用能够支持正则表达式的工具软件进行字符串处理时你就可以使用正则表达式。你还可以在支持正则表达式的语言中使用正则表达式,比如perl, java... C++中也有专门用于支持正则表达式的库。正则表达式总是和“使用什么工具软件或者语言”相关。相对来说,不同的工具和语言对正则表达式的支持程度不同,*nix里面将这些工具软件的对正则表达式的支持分类,因此也就有了“基础正则表达式”和“扩展正则表达式”。
不同的工具对正则表达式的支持,其实有些许的微妙不同;但是总体来说,使用正则还是基本按照标准来的。这些不同的工具支持程度,被称之为“正则流派”。而工具软件中支持这种匹配模式的那部分代码,称之为“正则引擎”。由于perl对正则表达式的支持非常到位,其正则引擎也比较优秀,因此perl语言算是正则的一大流派,目前大部分对正则的支持都或多或少参考了perl语言中的标准。