一、概念
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
二、举例
正则表达式为一个字符串,其中[]内的部分代表其中的任意字符。例如[abc]代表a或b或c。我们还可以用[a-z]这种形式代表某一字符区间。
有了正则表达式,我们能很简洁的去匹配、替换、切割字符串。
(1)查找
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
//要匹配的字符
String str = "131bcd6fgij";
//正则表达式
//这里代表第一个字符为1,第二个字符为2,3,7,8,后面9个为小写字母或数字,且不为5或者h
String regex = "1[2378][1-46-9a-gi-z]{9}";
//直接写
boolean flag1 = str.matches("1[2378][1-46-9a-gi-z]{9}");
System.out.println(flag1);
//或者
boolean flag2 = Pattern.matches(regex, str);
System.out.println(flag2);
//再或者将给定的正则表达式编译为模式。
Pattern p = Pattern.compile(regex);
//创建一个匹配器,匹配给定的输入与此模式。
Matcher m = p.matcher(str);
//尝试将整个区域与模式进行匹配。
boolean flag3 = m.matches();
//输出匹配结果,此次结果为true
System.out.println(flag3);
}
}
(2)替换
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
//要匹配的字符
String str = "12a6B985Ccv65";
//正则表达式
String regex = "[a-zA-Z]+";
//正则表达式
String regex2 = "\\d+";
//将字符串中英文字母替换为&符号,输出12&6&985&&&65
System.out.println(str.replaceAll("[a-zA-Z]", "&"));
//将字符串中连续英文字母替换为&符号,输出12&6&985&65
System.out.println(str.replaceAll(regex, "&"));
//将字符串中单个数字替换为0,输出00a0B000Ccv00
System.out.println(str.replaceAll("\\d","0"));
//将字符串中单个数字或者连续的数字替换为0,输出0a0B0Ccv0
System.out.println(str.replaceAll(regex2,"0"));
}
}
(3)切割
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
// 要切割的字符
String str = "2a6B5C65q9";
// 根据单个数字或者连续数字切割字符串
String []arr = str.split("\\d+");
System.out.println(arr.length);
for (String s : arr) {
System.out.println(s);
}
// 根据单个数字来切割字符串
arr = str.split("\\d");
System.out.println(arr.length);
for (String s : arr) {
System.out.println(s);
}
}
}
开头存在数字,导致最终分割结果在开头会多空的字符串。
三、正则表达式的部分规则
任意一个字符表示匹配任意对应的字符,如a匹配a,7匹配7,-匹配-。 | |
---|---|
[] | 代表匹配中括号中其中任一个字符,如[abc]匹配a或b或c。 |
- | 在中括号里面和外面代表含义不同,如在外时,就匹配-,如果在中括号内[a-b]表示匹配26个小写字母中的任一个;[a-zA-Z]匹配大小写共52个字母中任一个;[0-9]匹配十个数字中任一个。 |
^ | 在中括号里面和外面含义不同,如在外时,就表示开头,如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 |
(X) | 子表达式,将X看做是一个整体。 |