开发中我们总是或多或少的会使用到正则表达式,比如账号、手机号、密码、身份证号、银行卡号等等。你可能说这些我们写代码也能实现,但正则表达式可以说能用一行代码解决你几十行甚至百行的代码。
下面我们就一起学写下正则表达式,看完相信你自己可以随意写一个你需要的表达式,文末我也给大家总结了当下常用的表达式,希望对大家有所帮助。
正则表达式(RegularExpression)是一种文本模式,包括普通字符(例如,a到z之间的字母)和特殊字符(称为"元字符")(学习的重点)。其使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。虽然它的书写有点繁琐,但也是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感。
下面我们来具体看下其语法结构:
正则表达式(严格区分大小写)可以适用于多种开发语言,测试代码均以java为例。
Java中的正则校验
普通字符:
普通字符包括没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。当我们的正则表达式为一串普通字符(不包含元字符)时,校验字符串只有和正则一致时,才会校验通过。
元字符:
以上为部分元字符截图,下面我们分别对其做一一解释和测试。
表达式:\d表示一个数字字符
如:ABC\d表示必须以“ABC”开头,且以一个数字结尾。
\D表示一个非数字字符
如:ABC\D表示必须以“ABC”开头,且不是以一个数字结尾。
如果在对应的字符串后写多个,表示匹配多次,如ABC\d\d\d,表示ABC后面匹配三个数字。
表达式:\w表示一个字母(大小写均可)、数字,或下划线
如:ABC\wDEF表示“ABC”和“DEF”中间必须是一个字母,数字,或下划线。
\W表示这个位置的字符既不是字母、数字,也不是下划线。(特殊符号(除下划线),或者空格等满足)
如:ABC\WDEF表示“ABC”和“DEF”中间既不是一个字母和数字也不是下划线。
表达式:\s表示匹配一个看不见的符号,即空格或制表符(Tab键)
如:ABC\sDEF表示“ABC”和“DEF”中间必须是一个空格或制表符。
\S表示一个可以看得见的符号。
如:ABC\SDEF表示“ABC”和“DEF”中间可以看得见的符号(如:+-*/等等)。
表达式:.(小数点)表示“\n”和"\r"之外的任何单个字符
表达式:
(竖线)表示或的关系,表示检测的字符串须满足其中一个时,才符合条件。
如:AB
CD
EF表示“AB”或“CD”或“EF”中间的其中一个即可。
表达式:[ABC][]表示匹配其中任意一个字符。
如:A[ABC]E:则表示A和e的中间须是A,或B,或C其中的一个
[^ABC][^]表示不与中括号里的任意字符匹配。
如:A[^ABC]E:则表示A和E的中间除A,B,C这三个字符外,其他的字符都满足。
表达式:[1-5][值1-值2]则表示值1到值2中间的所有字符都满足(包括值1和值2)。 常用该正则来表示大小写字母范围,数字范围。
如:A[1-5]B:等同于A[]B,因为1-5其实就是1,2,3,4,5五个数。
[^1-5][^值1-值2]则表示除值1和值2之外的所有字符,都可以满足。
如:A[^1-3]B:则表示A和B中间的字符,只要不是1,2,3,则都满足。
表达式:?表示匹配前面的子表达式零次或一次。
如:ABC?DE:表示可匹配的字符串为ABDE(匹配0次C)或ABCDE(匹配1次C)。
表达式:+表示匹配前面的子表达式一次或多次(次数=1,即至少1次)
如:ABC+DE:AB和DE之前至少有一个C。
表达式: 这里的n是一个非负整数。匹配确定的前面的子表达式n次。
如:ABC{3}DE:表示AB和DE之间有3个C。
表达式:{n,m}m和n均为非负整数,其中n=m。最少匹配n次且最多匹配m次。
如:ABC{2,3}DE:表示AB和DE之间有2到3个C。
表达式:*表示匹配前面的子表达式任意次。
如:ABC*DE:表示AB和DE之间有任意个数(包括0)C。
修饰符(标记)
标记也称为修饰符,正则表达式的标记用于指定额外的匹配策略。
标记不写在正则表达式里,标记位于表达式之外,格式如下:
/正则表达式/flags
运算符优先级
正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。
相同优先级的从左到右进行运算,不同优先级的运算先高后低。下表从最高到最低说明了各种正则表达式运算符的优先级顺序:
常用正则表达式地址