正则表达式:又称规则表达式(regular expression),是一种模式匹配技术,由字面文本和具备特殊意义的符号组成。大多数文本处理工具都支持正则表达式(linux下的 find, grep等);经过构造合适的正则表达式,咱们能够对文本文件进行过滤,剥离,替换,搜索等操做。linux
通俗讲就是能够经过正则表达式这种特殊格式,其用有限量已知的文本结合一些特定功能的符号去拓展一些不肯定的文本,从而获得咱们想获得的一系列与相关的文本。正则表达式
本篇只讲解正则表达式(如下简称RE,匹配RE指实际操做中的RE),而不涉及实际运用的工具:express
1:位置标记:位置标记锚点(^, $),用来标识字符串位置的RE,在默认状况下,RE所匹配的字符能够出如今字符串中的任何位置。工具
^ : 指定了匹配RE中的文本必须起始于字符串中的首部, 如:“^abc”能匹配以abc起始的行;spa
$ : 指定了匹配RE中的文本必须结束于目标字符串中的尾部, 如:“^abc”能匹配以abc结尾的行;字符串
2:标识符:即指定特定的字符,进行匹配:io
任意一字符C: C就只能匹配字符C,该RE就只能匹配该字符;搜索
. : 匹配任意一个字符, 如:abc. 能够匹配abcd , abcz, 可是不能匹配abcde, abcdzx,只能匹配单个字符;grep
[] :匹配中括号内任意一个字符,中括号内能够是一个字符组或字符范围, 如:abc[de]能够匹配abcd, abce,abc[0-9]能够匹配abc0,abc3, abc9等;技术
[^] :匹配不在中括号内的任意一个字符,中括号内能够是一个字符组或字符范围,如:abc[^12]能够匹配abc3,abcd,但不能匹配abc1, abc2, [^0-9],能匹配abc以及随后不为数字的任意单个字符;
3:数量修饰符:标识符可出现一次,屡次,或不出现,数量修饰符能够定义模式出现的次数
' ? ': ?匹配在它以前出现的项(能够是单个字符,或者标识符)1次或0次,如: abc?d, 就能够匹配abcd或abd, 但不能匹配abccd.
' + ': +匹配在他以前的项1次或屡次,如:abc+能够匹配abc,abcc,但不可以匹配ab.
' * ': *匹配在他以前的项0次获屡次,如:abc*d能够匹配abd, abcd,abccd等.
{n}: 匹配以前的项n次,如:[0-9]{3}能够匹配任意的三位数(123,321..),[0-9]{3}能够拓展为[0-9][0-9][0-9].
{n, }: 以前的项至少须要匹配n次,如:[0-9]{2,}可以匹配任意一个两位或两位以上的数字.
{n,m}:以前的项至少须要匹配n次,最多只能匹配m次,如:[0-9]{2,5}可以匹配两位数到五位数之间的任意一个数字.
补充: ()能够将其内部的内容视为一个总体, |表示选择,a | b表示匹配a或者b( a,b 为项). \为转义字符,如匹配匹配中存在有(*, . , ^, $, + )特殊功能的符号,可在其前面加\ 进行转义。
几个正则表达式的例子:
匹配qq号: [1-9][0-9]{9} ,如今的qq号多为10位。
匹配IP地址:[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}, 此匹配不能检查IP地址的合法性。
匹配任意字符串: .*
......
还用不少的实用匹配等你去发现噢。