一、概念
正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本,提高代码的简洁读。正则表达式的英文为Regular Expression,缩写为regex,RE等。
二、基础规则
-
任意一个字符表示匹配任意对应的字符,如a匹配a,7匹配7,-匹配-。
-
[]代表匹配中括号中其中任一个字符,如[abc]匹配a或b或c。
-
-在中括号里面和外面代表含义不同,如在外时,就匹配-,如果在中括号内[a-b]表示匹配26个小写字母中的任一个;[a-zA-Z]匹配大小写共52个字母中任一个;[0-9]匹配十个数字中任一个。
4.^在中括号内和在外含义不同,在外如 ^7[0-9]表示匹配开头是7的,且第二位是任一数字的字符串;如果在中括号里面,表示除了这个字符之外的任意字符,表示相反(包括数字,特殊字符),如 [^abc] 表示匹配出去abc之外的其他任一字符。
-
.表示匹配任意的字符。
-
\d表示数字。
-
\D表示非数字。
-
\s匹配任何空白字符,与[ \t\n\r\x\f]等效。
-
\S表示由非空字符组成,[^\s]。
-
\w表示字母、数字、下划线,与[a-zA-Z0-9_]等效。
-
\W表示不是由字母、数字、下划线组成。(一般大小的正则都是小写的反义)
-
?: 表示出现0次或1次。
-
+表示出现1次或多次。
-
*表示出现0次、1次或多次。
-
{n}表示恰好出现n次。
-
{n,m}表示出现n~m次。
-
{n,}表示出现n次或n次以上。
-
XY表示X后面跟着Y,这里X和Y分别是正则表达式的一部分。
-
X|Y表示X或Y,比如"food|f"匹配的是foo(d或f),而"(food)|f"匹配的是food或f。
-
(X)子表达式,将X看做是一个整体。也称为捕获组,捕获组是通过从左至右计算其开括号来编号。例如,在表达式((A)(B(C))),有四个这样的组:((A)(B©)),(A),(B©),©
三、正则表达式在Java中的使用
在java中调用正则表达式的类是java.util.regex.Matcher和java.util.regex.Pattern。
一般正则表达式的使用类型有三种:匹配、替换、分割,例子如下。
1.简单匹配
public class RegexExample1 {
/*
* 实现方式1,匹配一个数字。
* 实现方式2, 匹配1个到3个字母,大小写不限,包括1和3个。
* 实现方式3(此种实现方式最快), 匹配11位的电话号码,匹配规则:第一个数字是1,第二个数字是2,3,7,8中任一个,后面9位数字中不包含4。
*/
public static void main(String[] args) {
String str1 = "1";
String str2 = "hl";
String str3 = "15869888888";
//正则表达式
String regex1 = "[0-9]";
String regex2 = "[a-zA-Z]{1,3}";
String regex3 = "1[2378][0-35-9]{9}";
//将给定的正则表达式编译为模式。 如果匹配需求较多,且需用同相同的regex去匹配,就可将这句写到静态模块里面,用的时候直接使用实例p
Pattern p = Pattern.compile(regex3);
//创建一个匹配器,匹配给定的输入与此模式。
Matcher m = p.matcher(str3);
//返回匹配的结果,匹配成功就返回true,失败就返回false,此次匹配返回true。
boolean flag = Pattern.matches(regex1, str1);
System.out.println(flag);
System.out.println(str2.matches(regex2));
System.out.println(flag);
}
}
2.替换
public class RegexExample1 {
/*
* 通过replaceAll方法将字符串中指定的内容替换为想要的内容
*/
public static void main(String[] args) {
//要匹配的字符
String str = "55ab786s4f1512s";
//正则表达式
String regex = "[a-zA-Z]+";
//正则表达式
String regex2 = "\\d+";
//将字符串中英文字母替换为#符号
System.out.println(str.replaceAll(regex, "#"));
//将字符串中单个数字或者连续的数字替换为!
System.out.println(str.replaceAll(regex2,"!"));
}
}
3.替换
public class RegexExample1 {
/*
* 通过大写字母来分割字符串,其中大写字母会被去掉,输出结果 hello world aa bb
*/
public static void main(String[] args) {
String str = "ShelloSworldSaaSbb";
String regex = "[A-Z]";
String[] arr = str.split(regex);
for (String s: arr) {
System.out.print(s +" ");
}
}
}
转载自:https://www.jianshu.com/p/3c076c6b2dc8 ,感谢整理和分享!