正则表达式(英语:Regular Expression、regex或regexp,缩写为RE),也译为正规表示法、常规表示法,在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。
( 一)、语法
(1)、^和$分别匹配行头和行尾。
比如:"^The": 开头一定要有"The"字符串;
"of$": 结尾一定要有"of despair" 的字符串;
那么"^abc$": 就是要求以abc开头和以abc结尾的字符串,实际上是只有abc匹配。
(2)、符号.匹配任何字符(可能行终止符(line terminators)除外
(3)、"或"符号 t(a|b|oo)n
匹配tan tbn toon
(4)、[] 中括号括住的内容只匹配一个单一的字符
",[a-zA-Z0-9]$": 匹配以逗号再加一个数字或字母结尾的字符串
你也可以把你不想要得字符列在中括号里,你只需要在总括号里面使用'^' 作为开头 "%[^a-zA-Z]%" 匹配含有两个百分号里面有一个非字母的字符串.
在中括号里面, 所有的特殊字符,包括(''), 都将失去他们的特殊性质 "[*\+?{}.]"匹配含有这些字符的字符串。正则表达式“t[aeio]n”只匹配“tan”、“Ten”、“tin”和“ton”。但“Toon”不匹配,因为在方括号之内你只能匹配单个字符。
(5)、量词*,?,+
X+ 表示X重复1次或多次。等同X{1,}
X* 表示X重复0次或多次,等同X{0,}
X?表示X重复0次或1次.等同X{0,1}
也可以在大括号里限制字符出现的次数
"ab{2}": 要求a后面一定要跟两个b(一个也不能少)("abb");
"ab{2,}": 要求a后面一定要有两个或者两个以上b(如"abb", "abbbb", 等.);
"ab{3,5}": 要求a后面可以有2-5个b("abbb", "abbbb", or "abbbbb").
(6)、\用作转义符,比如\.匹配一个句点,\\匹配一个反斜杠。
如果X和Y都是正则表达式,则XY表示“X的匹配后面跟着Y的匹配”。X|Y表示“任何X或Y的匹配”
可以使用分组来定义子表达式。将分组封装在()中,如([+-]?)([0-9]+)。然后你可以让模式匹配符(the pattern matcher)返回每个分组的匹配,或者使用\n来回引分组(refer back to a group with \n),其中n是组号(以\1起始)
(7)、常用字符
“/s”符号是空白符号,匹配所有的空白字符,包括Tab字符
\d [0-9]
\D [^0-9]
\w [A-Z0-9]
\W [^A-Z0-9]
\s [\t\n\r\f]
\S [^\t\n\r\f]
(二)、使用场合
(1)查询
比如查询某个字符里面是否含有一个特定的字符
String str="efg我ABC";
String regEx="我|A"; //表示我或A
Pattern p=Pattern.compile(regEx);
Matcher m=p.matcher(str);
boolean rs=m.find();
System.out.println(rs);
(2)提取
提取某个字符串的日期,
Pattern p=Pattern.compile("(\\d{4})-(\\d{1,2})-(\\d{1,2})");
Matcher m=p.matcher("x20xxx1984-10-20xxx19852x");
if(m.find()){
System.out.println("日期:"+m.group());
System.out.println("年:"+m.group(1));
System.out.println("月:"+m.group(2));
System.out.println("日:"+m.group(3));
}
(3)分割:
String regEx=";";
Pattern p=Pattern.compile(regEx);
String[] r=p.split("xd;abc;cde");
执行后,r就是{"xd","abc","cde"},其实分割时还有跟简单的方法:
String str="xd;abc;cde";
String[] r=str.split(";");
(4)替换(删除)
String regEx="a+"; //表示一个或多个a
Pattern p=Pattern.compile(regEx);
Matcher m=p.matcher("aaabbced a ccdeaa");
String s=m.replaceAll("A");
结果为"Abbced A ccdeA"
如果写成空串,既可达到删除的功能,比如:
String s=m.replaceAll("");
结果为"bbced ccde"