通配符适用的地方:shell命令行或者shell脚本中,一般用来匹配文件名的。
正则表达式适用的地方:字符串处理时,一般有一般正则和Perl正则。
最近写shell的时候发现一直以来对正则和通配符的理解有偏差,让我们再认识一下这几个基本的符号。
1,通配符
﹡ 匹配所有:匹配0个到多个的任意的字符。
?匹配任意单个字符
[ ! ] 匹配 不在中括号内的一个字符 (和正则中的 [ ^ ]作用相似,都是反向选择)
当要把以上的* ,?,[ ]当成参数或者字符串处理时,就要限制shell不能当成通配符。这时的处理方法是:加单引号或者用\(反斜杠转义)
2.正则表达式
字符匹配
.:匹配任意单个字符
*:匹配其前面一个字符出现任意次(区别与通配符的一到多个字符)
?:匹配其前面的字符1次或0次
+:匹配其前面一个字符出现至少一次(在扩展正则表达式中)
位置匹配
^:锚定行首
$:锚定行尾
\
\>或\b:锚定词尾,其前面的任意字符必须作为单词尾部出现
\B:非单词的开头或结尾
^$:空白行
分组匹配用() :
(ac)* :匹配ac这个分组出现任意次
\1:引用第一个左括号以及与之对应的右括号所包括的所有内容,同理还有\2,\3
断言匹配
java仅支持形式;而在其他语言中,或者在正则的设计中还有(?“name”)的格式
零宽断言
=exp>
!=exp>
!<=exp>
<=exp>
^(.(?
^(.(?
^((?!that).)*this(.(?
^((?!that).)*this((?!that).)*$
这4个正则表达式测试上述的几句话,结果都能够满足要求。
懒惰模式
懒惰限定符
代码/语法说明
*?
重复任意次,但尽可能少重复
+?
重复1次或更多次,但尽可能少重复
??
重复0次或1次,但尽可能少重复
{n,m}?
重复n到m次,但尽可能少重复
{n,}?
重复n次以上,但尽可能少重复
懒惰的限定符
分组和反向引用
(?.[a-z]*?)(/d)
表达式内可以使用 /2 来使用