一.正则表达式
1.预定义字符集
. | 表示任意一个字符 |
d | 表示任意一个数字 |
w | 表示任意一个单词字符(只能是数字、字母、下划线) |
s | 表示任意一个空白字符( fx0B) |
D | 表示任意一个非数字字符 |
W | 表示任意一个非单词字符 |
S | 表示任意一个非空 |
. | 表示. |
2.字符集合[]
正则表达式 | 说明 |
[] | 一个字符 |
[ace] | a c e中任意一个字符 |
[^] | 除了某个字符 |
[^ace] | 除了a c e的任意字符 |
[a-z] | a、b、c……z中的任意一个字符 |
[a-zA-Z0-9] | a-z、A-Z、0-9中任意一个字符 |
[a-z&&[^bc]] | a-z中除了bc以外的任意一个字符 |
3.数量词
正则表达式 | 说明 |
A? | 表示0个或1个A |
A* | 表示0或任意多个 |
A+ | 表示连续出现>=1次 |
A{n} | n个A |
X{n,} | >=n个A |
X{n,m} | 表示n到m个A |
4.分组()
() 可以将内容看做一个整体。()中可以使用"|"来表示或关系。
例:(ABC){3} ABCABCABC
(ABC|DEF){3} 可以是DEFABCABC、ABCDEFABC、ABCABCDEF、ABCDEFDEF、DEFABCDEF、DEFDEFABC、DEFDEFDEF其一。
5.边界符
通过在正则表达式的开始添加"^"以及末尾添加"$"来表示一个整体。若不使用它们,那么正则表达式只匹配某个字符串的部分内容是否符合格式规则,但使用它们,则要求字符串必须从头到尾都满足该格式规则。
不加:(ABC){3} 123ABCABCABC123231同样符合。
加^ :^(ABC){3} ABCABCABC123231符合。123ABCABCABC不符合。
加$ :(ABC){3}$ 123ABCABCABC符合。 ABCABCABC123231不符合。
加^$:^(ABC){3}$ 必须是ABCABCABC才符合。
【在java中,^$写与不写效果相同,在其他语言中未必如此。】
二.java中String正则表达式相关的API
1.matches
matches()方法的参数要求传入一个用字符串描述的正则表达式,然后使用该正则表达式描述的字符串格式规则来匹配当前字符串,若满足那么该方法返回true。否则返回false。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 import java.util.Scanner; 2 /** 3 * 使用给定的正则表达式验证当前字符串是否满足该格式要求. 4 * boolean matches(String regex) 5 * 在java字符串中,正则表达式的,需用\转义。 6 * 例如:正则表达式\,在java字符串中应为\\。 7 */ 8 public class String_matches { 9 public static void main(String[] args) { 10 System.out.println("请输入您的邮箱地址:"); 11 Scanner in = new Scanner(System.in); 12 String mail = in.nextLine(); 13 14 //邮箱的正则表达式:[a-zA-Z0-9_]+@[a-zA-Z0-9_]+(.[a-zA-Z]+)+ 15 String regex = "[a-zA-Z0-9_]+@[a-zA-Z0-9_]+(\.[a-zA-Z]+)+"; 16 System.out.println(regex); 17 18 boolean match = mail.matches(regex); 19 if(match){ 20 System.out.println("是邮箱"); 21 }else{ 22 System.out.println("不是邮箱"); 23 } 24 in.close(); 25 } 26 }
2.split
String[] split(String regex):参数要求传入一个用字符串描述的正则表达式,然后使用该正则表达式描述的字符串规则来匹配当前字符串,并按照满足的部分将字符串拆分。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 /** 2 * 将当前字符串按照给定的正则表达式匹配的部分进行拆分. 3 * String[] split(String regex) 4 */ 5 public class String_split { 6 public static void main(String[] args) { 7 String str = "0abc123def456ghi789jkl99"; 8 /* 9 * 按照数字部分进行拆分,得到所有的字母部分 10 */ 11 String[] data = str.split("[0-9]+"); 12 System.out.println(data.length); 13 for(int i=0;i<data.length;i++){ 14 System.out.println(data[i]); 15 } 16 } 17 } 18 //0之前会返回一个空字符串,而99后面的空字符串自动被省略。 19 //末尾的连续空字符串会被自动省略。
3.replaceAll
String replaceAll(String regex,String replacement):参数要求传入一个用字符串描述的正则表达式和一个需要替换的字符串,然后使用该正则表达式描述的字符串规则来匹配当前字符串,并将满足的部分替换为需要替换的这个字符串。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 /** 2 * 将当前字符串中满足正则表达式的部分替换为给定的字符串. 3 * String replaceAll(String regex,String str) 4 */ 5 public class String_replaceAll { 6 public static void main(String[] args) { 7 //将数字部分替换为"#NUMBER#" 8 String str = "abc123def456ghi789jk"; 9 //正则表达式:d+ 10 str = str.replaceAll("\d+", "#NUMBER#"); 11 System.out.println(str); 12 } 13 }