正则表达式是一种以一些字符赋予特殊意义之后,用来表达字符串,用以筛选各种形式的字符串用来进行查找、替换、删除等各种文本编辑作用的一种表示方式。
正则表达式的特殊字符
字符表示
. 可以表示任意可打印字符
[] 中括号范围内任意单个字符
[^] 中括号范围外任意单个字符 (相对所有可打印字符)
[:space:] 表示任意单个空白字符
[:digit:] 任意单个数字
[:lower:] 任意单个小写字母
[:upper:] 任意单个大写字母
[:alnum:] 任意单个字母或数字
[:alpha:] 任意单个字母
[:punct:] 任意单个标点符号
[:cntrl:] 任意单个控制字符
[:graph:] 任意单个图形字符
[:xdigit:] 任意单个十六进制字符
字符次数
* 表示一个字符重复任意次
+ 表示一个字符重复一次以上
? 表示一个字符重复一次或零次
{n} 表示重复n次
{n,m} 表示重复最少n次,最多m次
{,m} 表示重复最多m次
{n,} 表示重复最少n次
位置锚定
^ 确定位置为行首
$ 确定位置为行尾
\< 确定单词首
\> 确定单词尾
分组与引用 分组每一个配对的括号之间的内容就是一个分组,每一个分组就是一个整体,整体可以用最左变数第n个左括号,用\n 后项引用。
(a+(b)) \1=a+(b)
\2=b
如:显示passwd文件中用户名与shell名相同的行。
这个是个典型的后项引用,\1 就是引用的括号里面的内容。这才能达成用户名与shell相同的需求。
引用模式,只能用正向思维构建,不能用反向思维构建。
就比如
用正则表达式取出一个文件的路径 /etc/rc.d/inint.d/functions/
我想的有两种思路,
一种直接取路径,第二种就是先取出基名然后再取反取出路径。
第一种就是
思路就是^锁定词首,./*表示之后不管路径多长之后总是/为终点,\<表示锁定词首,就是说后面还有一个单词。
第二种就是
思路就是先是括号内的是一个整体,作用是取出基名,然后在外面加上[^]达到取反,从而取出路径,但是没有结果。
原因是[^]取反的是指定范围外的单个字符,然而括号括起来的是一个整体,不是一个字符,所以就会出现语法错误,同时也知道了中括号中不能套小括号。
原创文章,作者:何必呢,如若转载,请注明出处:http://www.178linux.com/83544