一、定义
正则表达式是含有一些具有特殊意义字符的字符串,这些特殊字符称为正则表达式中的元字符
eg:"\\dhello"中的\\d就是有特殊意义的元字符,代表0--9数字中的任意一个,而9hello,1hello都是和正则表达式\\dhello匹配的字符串
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
二、部分元字符意义
元字符 | 在正则表达式中的写法 | 意义 |
---|---|---|
. | "." | 代表任意一个字符 |
\d | "\\d" | 代表0--9任意一个数字 |
\D | "\\D" | 代表任意一个非数字字符 |
\s | "\\s" | 代表空格类字符,"\t","\n","\f","\r" |
\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