正则表达式:又称规则表达式(regular expression),是一种模式匹配技术,由字面文本和具有特殊意义的符号组成。大多数文本处理工具都支持正则表达式(linux下的 find, grep等);通过构造合适的正则表达式,我们可以对文本文件进行过滤,剥离,替换,搜索等操作。
通俗讲就是可以通过正则表达式这种特殊格式,其用有限量已知的文本结合一些特定功能的符号去拓展一些不确定的文本,从而得到我们想得到的一系列与相关的文本。
本篇只讲解正则表达式(以下简称RE,匹配RE指实际操作中的RE),而不涉及实际运用的工具:
1:位置标记:位置标记锚点(^, $),用来标识字符串位置的RE,在默认情况下,RE所匹配的字符可以出现在字符串中的任何位置。
^ : 指定了匹配RE中的文本必须起始于字符串中的首部, 如:“^abc”能匹配以abc起始的行;
$ : 指定了匹配RE中的文本必须结束于目标字符串中的尾部, 如:“^abc”能匹配以abc结尾的行;
2:标识符:即指定特定的字符,进行匹配:
任意一字符C: C就只能匹配字符C,该RE就只能匹配该字符;
. : 匹配任意一个字符, 如:abc. 可以匹配abcd , abcz, 但是不能匹配abcde, abcdzx,只能匹配单个字符;
[] :匹配中括号内任意一个字符,中括号内可以是一个字符组或字符范围, 如: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地址的合法性。
匹配任意字符串: .*
......
还用很多的实用匹配等你去发现噢。