一、定义
正则表达式是含有一些具有特殊意义字符的字符串,这些特殊字符称为正则表达式中的元字符
eg:"\dhello"中的\d就是有特殊意义的元字符,代表0--9数字中的任意一个,而9hello,1hello都是和正则表达式\dhello匹配的字符串
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
二、部分元字符意义
元字符 | 在正则表达式中的写法 | 意义 |
. | "." | 代表任意一个字符 |
d | "\d" | 代表0--9任意一个数字 |
D | "\D" | 代表任意一个非数字字符 |
s | "\s" | 代表空格类字符," "," ","f"," " |
S | "\S" | 代表非空格类字符 |
w | "\w" | 代表可用于标识符的字符(不包含美元符号) |
W | "\W" | 代表不能用于标识符的字符 |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
三、方括号中元字符意义
1、[abc]:代表a、b、c中的任意一个
2、[^abc]:代表除了a、b、c意外的任意一个
3、[a-zA-Z]:代表英文字母中任意一个
4、[a-d]:代表a至d中任意一个
5、[a-d[m-p]]:代表a至d,或m至p中的任意一个字符(并)
6、[a-z&&[def]]:代表a-z与d、e、f交集 ,即代表d、e、f中的任意一个(交)
7、[a-f&&[^bc]]:代表a、d、e、f(差)
8、[.]代表. 由于"."代表任何一个字符,所以在正则表达式中如果想使用普通意义的点字符,必须使用[.]
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
四、限定修饰符的用法
带限定符号的模式 | 意义 |
X? | X出现0次或1次 |
X* | X出现0次或多次 |
X+ | X出现1次或多次 |
X{n} | X恰好出现n次 |
X{n,} | X至少出现n次 |
X{n,m} | X出现n--m次 |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
五、相关正则类
1.String 类:matches()
String reg = "\d";
String str = "123";
str.matches(reg); //返回true.false
str.replaceAll(reg,"")//替换,将数字替换为空
str.split(reg) //将str按正则表达式reg分割
1 package zhenze; 2 3 public class Demo02 { 4 public static void main(String[] args) { 5 String regex = "[1-9][0-9]*[.]?[0-9]*"; 6 String str1="12r34a5"; 7 String str2="123.3457"; 8 if(str1.matches(regex)) 9 { 10 System.out.println(str1+"可以表示数字"); 11 } 12 else 13 { 14 System.out.println(str1+"不可以表示数字"); 15 String result=str1.replace("\D", ""); //替换,去掉非数字字符 16 System.out.println("剔除"+str1+"的非数字字符得到的字符串是:"+result); 17 } 18 if(str2.matches(regex)) 19 { 20 System.out.println(str2+"可以表示数字"); 21 } 22 else 23 { 24 System.out.println(str2+"不可以表示数字"); 25 String result=str1.replace("\D", ""); //替换,去掉非数字字符 26 System.out.println("剔除"+str2+"的非数字字符得到的字符串是:"+result); 27 } 28 } 29 30 31 } 32 33 控制台信息: 34 12r34a5不可以表示数字 35 剔除12r34a5的非数字字符得到的字符串是:12r34a5 36 123.3457可以表示数字
2.Pattern类
Pattern p = Pattern.compile("\d"); //初始化模式对象
Matcher m = p.matcher("ass923asdf"); //用带匹配字符序列初始化匹配对象
boolean b = m.matches(); //返回匹配结果true.false
1 package zhenze; 2 3 import java.util.regex.Matcher; 4 import java.util.regex.Pattern; 5 6 public class Demo01 { 7 //Pettern 类 8 public static void main(String[] args) { 9 Pattern p; //模式对象 10 Matcher m; //匹配对象 11 String regex="[1-9][0-9]*[.]?"; 12 p=Pattern.compile(regex); //初始化模式对象 13 String s="Price:123.456"; 14 m=p.matcher(s); 15 while(m.find()) 16 { 17 String str=m.group(); 18 System.out.println("从"+m.start()+"到"+m.end()+"匹配模式子序列"); 19 System.out.println(str); 20 } 21 } 22 } 23 24 控制台信息: 25 从6到10匹配模式子序列 26 123. 27 从10到13匹配模式子序列 28 456