前言:
在学正则表达式之前,有小伙伴讲解说,正则表达式在文本处理上功能非常强大、使用非常普遍,并且现在很多的工具软件都支持它,以后的学习工作中会经常使用,非常灵活,但是灵活的同时又是繁琐,需要小心翼翼的仔细推敲。抱着认真、好奇的心思听完了王老的课。我自己理解的正则表达式是,给一些符号赋予一定的涵义,代表一个我们规定的特殊涵义,然后通过我们的要求的字段进行这些字符的组合,组合成符合我们条件的一个字符表达式,然后用这个字符条件表达式去目的文本中对应搜索,有匹配的就显示标记出来。学习之后,感觉确实非常灵活和强大,各种的文本中会出现的符号都给予了定义,能通过这些字符进行灵活的排列组合,得到我们想要的字段。但是在强大和灵活的同时,感觉又比较繁琐,各种符号的组合。感觉应该是一个需要经常训练,熟能生巧的一个知识,就好像上学时候的题海战术,用的多了,练得多了,见得多了,用起来应该会比较顺手和灵活的。自己感觉这个知识点要多做多练多看多学习,由于组合太多,也许能够通过组合得到相应的目的表达式,但是这么灵活的正则表达式,难道没有更简洁更直观更有趣的排列组合方式吗,只能通过多看多做多练习,慢慢体味其中排列组合的乐趣。
正则表达式是通过一些特殊字符的排列,用以查找、替换、删除一行或多行文字字符串,通俗的说,正则表达式就是用在字符串的处理上面的一项“表达式”
在学习正则表达式之前,先看看支持正则表达式的几个命令,首先是支持基本正则表达式的命令grep,然后是扩展正则表达式egrep和fgrep
一、都支持的常用特殊字符
[:alnum:] 表示所有字母和数字,包括大小写和数字
[:alpha:] 表示所有字母,包括大小写
[:lower:] 表示所有小写英文字母
[:upper:] 表示所有大写英文字母
[:punct:] 表示所有标点字符
[:digit:] 表示所有数字
[:space:] 表示所有能产生空白的字符,包括空格、tab键、CR等
二、基本正则表达式
1、grep
用法 grep [Option] pattern file
这其中的pattern,就是我们通过那些特殊涵义的字符组合出来的条件表达式
常用选项
-i,–ignore-case,忽略字符的大小写
-v,–invert-match,显示那些没有被匹配到的文本
-c,–count,计算匹配到的行数
-o,–only-match,只显示被匹配到的字段
-n,–line-number,显示匹配到的行号
-q,–quiet,静默模式,不输出匹配信息
-e,实现多个选项之间的逻辑“或”的关系
-A#,–after,显示匹配到的后#行
-B#,–before,显示匹配到的前#行
-C#,context,显示匹配到的前后各#行
-E,egrep
注意:grep在数据中查找一个字符串时,是以整行为单位进行数据选取的,会把含有字符串的行显示出来,不含有字符串的行不会显示
2、基本正则表达式元字符
(1)字符匹配
. 匹配任意单个字符
[] 匹配指定范围之内的任意单个字符
[^] 匹配指定范围之外的任意单个字符
(2)次数匹配
* 匹配前面的字符任意次数,包括0次
\? 匹配前面的字符0次或1次
\+ 匹配前面的字符至少一次
.* 匹配任意字符任意次数
\{m\} 匹配前面的字符m次
\{m,n\} 匹配前面的字符[m,n]次
\{m, \} 匹配前面的字符[m,+∞)次
\{ ,n\} 匹配前面的字符[0,n]次
(3)位置锚定:定位出现的位置
^ 行首锚定,放在字符的前面,定位字符在行首位置
$ 行尾锚定,放在字符的后面,定位字符在行尾位置
\<或\b 词首锚定,用在单词的最左侧
\>或\b 词尾锚定,用在单词的左右侧
^$ 匹配整行为空行
^pattern$ 用于模式匹配整行
\<pattern\>或者\bpattern\b 匹配整个单词
(4)分组
\(\) 将一个或多个字符捆绑在一起,当作一个整体进行处理,\(pattern\)\+
分组括号中的模式匹配到的内容会被正则表达式引擎记录与内部的变量中,这些变量的命名方式为:\1,\2…
\1 从左侧其,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
后向引用:引用前面的分组括号中的模式所匹配字符(而非模式本身)
二、egrep及扩展正则表达式
egrep=grep -E
用法: egrep [options] pattern [file]…
扩展正则表达式的原字符
(1)字符匹配
. 匹配任意单个字符
[] 指定范围的单个字符
[^] 指定范围之外的单个字符
(2)次数匹配
* 前面字符任意次数,包括0次
? 0次或1次
+ 至少1次,[1,+∞)
{m} 匹配m次
{m,n} 匹配[m,n]次
(3)位置锚定
^ 行首
$ 行尾
\< ,\b 词首
\> ,\b 词尾
(4)分组 () ,后向引用 \1 ,\2…
(5)或 逻辑组合 |
a|b = a+b
A|abc = A+abc
(A|a)bc = Abc+abc
原创文章,作者:black_fish,如若转载,请注明出处:http://www.178linux.com/29478