推荐链接:
- Linux【NO.4】:globbing:文件名通配
- Linux【NO.4】:vim文本编辑器入门进阶
- Linux【NO.4】:正则表达式
- Linux【NO.4】:文本处理三剑客之grep
- Linux【NO.4】:文本处理三剑客之sed
- Linux【NO.4】:文本处理三剑客之awk
正则表达式
什么是正则表达式:
在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。
很可能你使用过Windows/Dos下用于文件查找的通配符(wildcard),也就是*和?。如果你想查找某个目录下的所有的Word文档的话,你会搜索*.doc。在这里,*会被解释成任意的字符串。和通配符类似,正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能更精确地描述你的需求——当然,代价就是更复杂——比如你可以编写一个正则表达式,用来查找所有以0开头,后面跟着2-3个数字,然后是一个连字号“-”,最后是7或8位数字的字符串(像010-12345678或0376-7654321)。
字符是计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等等。字符串是0个或更多个字符的序列。文本也就是文字,字符串。说某个字符串匹配某个正则表达式,通常是指这个字符串里有一部分(或几部分分别)能满足表达式给出的条件。
基础入门:
字符匹配: .:匹配任意单个字符 ~]# grep "r..t" /etc/passwd []:匹配指定范围内的任意单个字符 [^]:匹配指定范围外的任意单个字符 [[:alpha:]][[:digit:]]、[[:lower:]] [[:upepr:]] [[:alnum:]] [[:punct:]] [[:space:]] 匹配次数:用在要指定其出现的次数的字符的后面,用户限制其前面字符出现的次数; *:匹配器前面的字符任意次:0,1,多次; 例如:grep "x*y" abxy aby xxxy yab .*:匹配任意长度的任意字符,贪婪模式,能匹配多长就匹配多长; \?:匹配其前面的字符0次或者1次;即其前面的字符可有可无的; \+:匹配其前面的字符一次或多次;即其前面的字符出现至少1次; \{m\}:匹配其前面的字符m次; \{m,n\}:匹配其前面的字符至少m次,至多n次; \{0,n\}:至多n次; \{m,\}:至少m次; 位置锚定: ^:行首锚定;用于模式的最左侧; $:行尾锚定;用于模式的最右侧 ^PATTERN$:用PATTERN来匹配整行; ^$:空白行; ^[[:space:]]*$:空行或包含空白字符的行; 单词:非特殊字符组成的连续字符(字符串)都为单词; \< 或 \b:词首锚定,用于单词模式的左侧; grep "\<word" \> 或 \b:词尾锚定,用于单词模式的右侧; grep "word\>" \<PATTERN\>:匹配完整单词;
练习: 1、显示/etc/passwd文件中不以/bin/bash结尾的行; ~]# grep -v "/bin/bash$" /etc/passwd 2、找出/etc/passwd文件中的两位数或三位数; ~]# grep "\<[[:digit:]]\{2,3\}\>" /etc/passwd 3、找出/etc/rc.d/rc.sysinit或/etc/grub2.cfg文件中,以至少一个空白字符开头,且后面非空白字符的行; ~]# grep "^[[:space:]]\+[^[:space:]]" /etc/grub2.cfg 4、找出"netstat -tan"命令的结果中以"LISTEN"后跟0、1或多个空白字符结尾的行; ~]# netstat -tan|grep "LISTEN[[:space:]]*$"
分组及引用: \(\):将一个或多个字符捆绑在一起,当作一个整体进行处理; \(xy\)*ab Note:分组括号中的模式匹配到的内容会被正则表达式引擎自动记录到内部的变量中,这些变量为: \1:模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符; \2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符 \3
He loves his lover. He likes his lover. She likes her liker. She loves her liker. ~]# grep "\(l..e\).*\1" lovers.txt 后向引用:引用前面的分组括号中的模式所匹配到的字符;
扩展正则表达式的元字符:
扩展正则表达式的元字符: 字符匹配: .:匹配任意单个字符 []:匹配指定范围内的任意单个字符 [^]:匹配指定范围外的任意单个字符 次数匹配: *:匹配器前面的字符任意次:0,1,多次; .*:匹配任意长度的任意字符,贪婪模式,能匹配多长就匹配多长; ?:匹配其前面的字符0次或者1次;即其前面的字符可有可无的; +:匹配其前面的字符一次或多次;即其前面的字符出现至少1次; {m}:匹配其前面的字符m次; {m,n}:匹配其前面的字符至少m次,至多n次; {0,n}:至多n次; {m,}:至少m次; 位置锚定: ^:行首锚定;用于模式的最左侧; $:行尾锚定;用于模式的最右侧 \<或\b:词首锚定,用于单词模式的锚定; \>或\b:词尾锚定,用于单词模式的锚定; 分组及引用 ():分组;括号内模式匹配到的字符会被记录到正则表达式引擎的内部变量中; 后向引用:\1,\2.... 或: a|b:a或b C|cat:C或cat (c|C)at:cat或Cat
python中正则:
进阶:
待续....
参考引用:正则表达式30分钟入门教程
转载请注明出处:http://www.cnblogs.com/jasperhsu/p/5079378.html