importjava.util.Scanner;public classRegexDemo02 {public static voidmain(String[] args) {
Scanner sc= newScanner(System.in);
System.out.println("请输入您的QQ号码:");
String str=sc.nextLine();boolean f =queckQQ(str);
System.out.println("result:"+f);
}public static booleanqueckQQ(String qq) {
String regex= "[1-9][0-9]{4,14}";boolean flag =qq.matches(regex);returnflag;//return qq.matches("[1-9][0-9]{4,14}");
}
}
3、正则表达式的组成规则
规则字符在java.util.regex Pattern类中 常见组成规则
·字符
x 表示字符x。举例:‘a’ 表示字符a
\\ 表示反斜线字符
\n 表示新行(换行)符(‘\u000A’)
\r 表示回车符('\u 000D')
· 字符类
[abc] 表示a 、b、c(简单类)
[^abc] 表示任何字符,除了a、b或c(否定)
[a-zA-Z] 表示a到z 或A到Z,两头的字母包括在内(范围)
[0-9] 表示0到9的字符都包括
·预定义字符类
. 表示任何字符
\d 表示数字:[0-9]
\D 表示非数字:[^0-9]
\w 表示单词字符:[a-zA-Z_0-9],在正则表达式里面组成单词的东西必须有这些东西组成
\W 表示非单词字符
·边界匹配器
^ 表示行的开头
$ 表示行的结尾
\b 表示单词边界,就是不是单词字符的地方。
举例:hello world?haha;xixi
·数量词
X?
X,一次或一次也没有
X*
X,零次或多次
X+
X,一次或多次
X{n}
X,恰好 n 次
X{n,}
X,至少 n 次
X{n,m}
X,至少 n 次,但是不超过 m 次
3、正则表达式的应用
· 判断功能 public boolean matches(String regex)
· 分割功能 public String[] split(String regex)
· 替换功能 public String replaceAll(String regex,String replacement)
· 获取功能 Pattern和Matcher类的使用
1)匹配方法 matches
public static boolean matches(String regex, CharSequence input)
编译给定正则表达式并尝试将给定输入与其匹配。
调用此便捷方法的形式
Pattern.matches(regex, input);
与表达式
Pattern.compile(regex).matcher(input).matches()
的行为完全相同。
如果要多次使用一种模式,编译一次后重用此模式比每次都调用此方法效率更高。参数:regex - 要编译的表达式input - 要匹配的字符序列抛出:
举例1:校验手机号码。要求:11位,18或13开头。
* 13436975980
* 13688886868
* 13866668888
* 13456789012
* 13123456789
* 18912345678
* 18886867878
* 18638833883
importjava.util.Scanner;public classRegexDemo03 {public static voidmain(String[] args) {
Scanner sc= newScanner(System.in);
System.out.println("请输入您的手机号码:");
String phone=sc.nextLine();boolean f =queckTelPhone(phone);
System.out.println("result:"+f);
}public static booleanqueckTelPhone(String phone) {
String regex= "1[38]\\d{9}";returnphone.matches(regex);
}
}
举例2:校验邮箱。
importjava.util.Scanner;/*** 定义邮箱的规则
* 1517806580@qq.com
* liuyi@163.com
* linqingxia@126.com
* fengqingyang@sina.com.cn
* fqy@itcast.cn*/
public classRegexDemo04 {public static voidmain(String[] args) {
Scanner sc= newScanner(System.in);
System.out.println("请输入您的邮箱:");
String email=sc.nextLine();boolean f =queckEmail(email);
System.out.println("result:"+f);
}public static booleanqueckEmail(String email) {
String regex= "\\w+@\\w{2,6}(\\.\\w{2,3})+";returnemail.matches(regex);
}
}
2)分割功能 split
public String[] split(CharSequence input, int limit)
围绕此模式的匹配拆分给定输入序列。
此方法返回的数组包含输入序列的子字符串,由匹配此模式的另一子序列或输入序列的结尾终止。数组中子字符串的顺序与其在输入中出现的顺序相同。如果此模式与输入的任何子序列都不匹配,那么得到的数组仅包含一个元素,即字符串形式的输入序列。
limit 参数控制应用模式的次数,从而影响结果数组的长度。如果限制 n 大于零,那么模式至多应用 n> - 1 次,数组的长度不大于 n,并且数组的最后条目将包含除最后的匹配定界符之外的所有输入。如果 n 非正,那么将应用模式的次数不受限制,并且数组可以为任意长度。如果 n 为零,那么应用模式的次数不受限制,数组可以为任意长度,并且将丢弃尾部空字符串。
举例3:
百合网,世纪佳缘,珍爱网,QQ
搜索好友
性别:女
范围:"18-24",age>=18 && age<=24
importjava.util.Scanner;public classRegexDemo05 {public static voidmain(String[] args) {//定义一个年龄搜索范围
String ages = "18-24";//定义规则
String regex = "-";//调用方法
String[] strArray =ages.split(regex);//如何得到int类型的呢?
int startAge = Integer.parseInt(strArray[0]);int endAge = Integer.parseInt(strArray[1]);//键盘录入年龄
Scanner sc = newScanner(System.in);
System.out.println("请输入你的年龄:");int age =sc.nextInt();if(age>=startAge && age<=endAge) {
System.out.println("你就是我想找的");
}else{
System.out.println("不符合我的要求,gun");
}
}
}
举例4:直接分割
public classRegexDemo06 {public static voidmain(String[] args) {//定义一个字符串
String s1 = "aa,bb,cc";//直接分割
String[] str1Array = s1.split(",");for (int x = 0; x < str1Array.length; x++) {
System.out.println(str1Array[x]);
}
System.out.println("---------------------");
String s2= "aa.bb.cc";
String[] str2Array= s2.split("\\.");for (int x = 0; x < str2Array.length; x++) {
System.out.println(str2Array[x]);
}
System.out.println("---------------------");
String s3= "aa bb cc";
String[] str3Array= s3.split(" +");for (int x = 0; x < str3Array.length; x++) {
System.out.println(str3Array[x]);
}
System.out.println("---------------------");//硬盘上的路径,我们应该用\\替代\
String s4 = "E:\\JavaSE\\day14\\avi";
String[] str4Array= s4.split("\\\\");for (int x = 0; x < str4Array.length; x++) {
System.out.println(str4Array[x]);
}
System.out.println("---------------------");
}
}
举例5:
/*
* 我有如下一个字符串:"91 27 46 38 50"
* 请写代码实现最终输出结果是:"27 38 46 50 91"
* 分析:
* A:定义一个字符串
* B:把字符串进行分割,得到一个字符串数组
* C:把字符串数组变换成int数组
* D:对int数组排序
* E:把排序后的int数组在组装成一个字符串
* F:输出字符串
*/
importjava.util.Arrays;public classRegexDemo07 {public static voidmain(String[] args) {
String s= "91 27 46 38 50";
String[] strArray= s.split(" ");int[] arr = new int[strArray.length];for (int x = 0; x < strArray.length; x++){
arr[x]=Integer.parseInt(strArray[x]);
}
Arrays.sort(arr);
StringBuilder sb= newStringBuilder();for(int x = 0; x < arr.length; x++){
sb.append(arr[x]).append(" ");
}
String result=sb.toString().trim();
System.out.println("result:"+result);
}
}
3)替换功能
String类的public String replaceAll(String regex,String replacement)
用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
public classRegexDemo08 {public static voidmain(String[] args) {
String s= "helloqq12345worldkh622112345678java";
String regex= "\\d";
String ss= "*";
String result=s.replaceAll(regex,ss);
System.out.println("result:"+result);
}
}
4)获取功能
Pattern和Matcher类的使用
模式和匹配器的基本使用顺序
importjava.util.regex.Matcher;importjava.util.regex.Pattern;public classRegexDemo09 {public static voidmain(String[] args) {//模式和匹配器的典型调用顺序//把正则表达式编译成模式对象
Pattern p = Pattern.compile("a*b");//通过模式对象得到匹配器对象,这个时候需要的是被匹配的字符串
Matcher m = p.matcher("aaaaab");//调用匹配器对象的功能
boolean b =m.matches();
System.out.println(b);//以上是判断功能,太麻烦了,我们直接用字符串的方法做
String s = "aaaaab";
String regex= "a*b";boolean bb =s.matches(regex);
System.out.println(bb);
}
}
举例:
获取下面这个字符串中由三个字符组成的单词
da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?
importjava.util.regex.Matcher;importjava.util.regex.Pattern;/*** Created by gao on 15-12-5.*/
public classRegexDemo10 {public static voidmain(String[] args) {//定义字符串
String s = "da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?";//规则 \\b表示单词边界,边界不允许出现单词字符
String regex = "\\b\\w{3}\\b";//把规则编译成模式对象
Pattern p =Pattern.compile(regex);//通过模式对象得到匹配器对象
Matcher m =p.matcher(s);//调用匹配器对象的功能//通过find方法就是查找有没有满足条件的子串//public boolean find()
while(m.find()) {
System.out.println(m.group());
}//注意:一定要先find(),然后才能group()//IllegalStateException: No match found//String ss = m.group();//System.out.println(ss);
}
}