Linux 正则表达式小入门

概要

Linux下的一些基本工具,如grep,awk,sed等,都支持正则表达式.一般拿来做简单的正则表达式实践最好不过了.然而正则表达式的王国何其浩瀚,想完全掌握正则表达式的精髓恐怕没有那么简单.很多语言,如Perl,PHP,Java等,都有专门的正则表达式支持.这本书对正则表达式的讲解非常全面和细致,参考这里:Mastering regular expressions

百度给的第一个链接就是这个网站,貌似对正则表达式讲的挺全,传送门-->正则


看几个基本的元字符吧~

# 正则表达式中各符号的含义

表示单词的重复,一般就下面的四个符号, ?*.+ 

?		# 匹配 0 个或者 1 个字符, ( 0, 1 ) 

*		# 匹配 0 个或者更多的字符,( >= 0 )

.		# 匹配 1 个字符	( == 1)

+		# 匹配 1 个或更多字符 ( >= 1)

{m}		# 字符恰好匹配 m 次

{m, n}		# 字符次数在 m 和 n 之间 (含)

{m,}		# 字符次数在 m 或 m 以上

[]		# 匹配字符的范围

[^]		# 不在该范围内

^		# 以该字符开头

$		# 以该字符结尾

\d		# 匹配一个数字 等价于[0-9]

\D		# 匹配一个非字符 等价于 [^0-9]

\w		# 匹配一个字母或数字 等价于[a-zA-Z0-9]

\W		# 匹配一个非字母或者数字 等价于[^a-zA-Z0-9]

\s		# 匹配一个换行符 等价于[\n\t\r\f]

\S		# 匹配一个非换行符 等价于[^\n\t\r\f]

\b		# 匹配一个单词的开始或者结束


注意上面开始的四个符号老是弄混了, 就是问号(?), 星号(*), 点(.), 加号(+), 因为这个和文件通配符表示的意思不一样.


实例

下面我们来分析两个实例,感受一下正则表达式的魅力

// 匹配IP地址
((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
貌似有点长,不过拨开看也就一点点东西, 其中 (2[0-4]\d|25[0-5]|[01]?\d\d?) 如果用 啦啦 表示的话, 那上面的就是 (啦啦\.){3}啦啦.是不是这样子就好懂多了.啦啦这个字符串表示的是,匹配0到255任意一个数字,当然022这个前面带有0的也是合法的.啦啦后面的\.意思就是一个句号,只不过句号在正则表达式里面是一个元字符,只好先转义一下.

再来分析一下啦啦 (2[0-4]\d|25[0-5]|[01]?\d\d?), 其实是由三个字符串,中间有两个 | 符号连接起来的. 2[0-4]\d 和 [25][0-5] 和 [01]?\d\d? 问号表示问好前面的字符可以有一个,也可以没有.


再来看第二个,不过这个我还是一知半解.

匹配电子邮件
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
其实也都是最简单的应用, 加入我们也用 呵呵 表示 \w+([-+.]\w+)* 那么原来的表达式就变成了 呵呵@呵呵\.呵呵 一看就明显是个电子邮件的格式.

呵呵 表示的是什么意思呢,就是说,一个单词(word), 用元字符(\w)表示, + 表示可以重复至少一次.加上[-+.]三种符号的任意一个,星号表示小括号里的,可以重复任意次.


后面的有点复杂了,目前还是浅尝辄止为妙.




郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。