版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cheng_cuo_tuo/article/details/88328023
import java.util.regex.Pattern;
import java.util.regex.Matcher;
/*
( 和 ) 括号里面的东西代表一个子表达式
*/
public class Subexpression1{
public static void main(String[] args){
String str = "Hello, my name is Ben Forta, and I am the author of books on SQL, ColdFusion, WAP, " +
"Windows 2000, and other subjects.";
//匹配出空格,也就是
// nbsp;{2,}
Pattern p = Pattern.compile("( ){2,}");
Matcher m = p.matcher(str);
System.out.println(m.pattern()); //( ){2,}
while (m.find()){
System.out.println(m.group());
}
//
System.out.println();
str = "Pinging hog.forta.com [12.159.46.200] with 32 bytes of data.";
//匹配 IP 地址
// \d{1, 3}\.\d{1,3}.\d{1,3}.\d{1,3}
p = Pattern.compile("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}");
m = p.matcher(str);
System.out.println(m.pattern()); // \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
while (m.find()){
System.out.println(m.group());
}
// 12.159.46.200
System.out.println();
//使用正在表达式的子表达式,将 \d{1,3}\. 看作一个整体
// (\d{1,3}\.){3}{\d{1,3}}
p = Pattern.compile("(\\d{1,3}\\.){3}\\d{1,3}");
m = p.matcher(str);
System.out.println(m.pattern()); // \d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}
while (m.find()){
System.out.println(m.group());
}
// 12.159.46.200
}
}
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
| 或 操作是把位于它左边和右边按两个部分都作为一个整体来看待的
*/
public class Subexpression2{
public static void main(String[] args){
String str = "ID: 042 SEX: M DOB: 1967-08-17 Status: Active (20";
//匹配出生日,生日的年份以 19 或 20 开头
// (19|20)\d{2}
Pattern p = Pattern.compile("(19|20)\\d{2}");
Matcher m = p.matcher(str);
while (m.find()){
System.out.println(m.group());
}
// 1967
System.out.println();
// [(19)(20)]\d{2} 即使这样也不能完整的匹配出 19 和 20 开头的年份,可以看出 [ 和 ] 里面的所有
// 内容都是看作 单独字符 处理的
p = Pattern.compile("[(19)(20)]\\d{2}");
m = p.matcher(str);
System.out.println(m.pattern()); //[(19)(20)]\d{2}
while (m.find()){
System.out.println(m.group());
}
/*
042
196
(20
*/
}
}
import java.util.regex.Pattern;
import java.util.regex.Matcher;
/*
匹配 IP
任何一个1位或2位数
任何一个以1开头的3位数
任何一个以2开头、第2位数字在0~4之间的3位数
任何一个以25开头、第3位数字在0~5之间的3位数
*/
public class Subexpression3{
public static void main(String[] args){
String str = "Pinging hog.forta.com [12.159.46.200] with 32 bytes of data.";
// (((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))
Pattern p = Pattern.compile("(((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))\\.){3}((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))");
Matcher m = p.matcher(str);
System.out.println(m.pattern()); //(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))
while (m.find()){
System.out.println(m.group());
}
//12.159.46.20
}
}