正则表达式概述及基本使用
正则表达式:是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。其实就是一种规则。有自己特殊的应用。
规则字符在java.util.regex Pattern类中
常见组成规则
A:字符
x 字符 x。举例:'a'表示字符a
\\ 反斜线字符。
\n 新行(换行)符 ('\u000A')
\r 回车符 ('\u000D')
B:字符类
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围)
[0-9] 0到9的字符都包括
C:预定义字符类
. 任何字符。我的就是.字符本身,怎么表示呢? \.
\d 数字:[0-9]
\w 单词字符:[a-zA-Z_0-9]
在正则表达式里面组成单词的东西必须有这些东西组成
D:边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
就是不是单词字符的地方。
举例:hello world?haha;xixi
E:Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
正则表达式的应用
1、判断功能
public boolean matches(String regex)
举例1:校验qq号码.
1:要求必须是5-15位数字
2:0不能开头
<span style="color:#333333;">package check;
import java.util.Scanner;
/*
* 正则表达式:符合一定规则的字符串。
*/
public class checkWithRegex {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
System.out.println("请输入你的QQ号码");
String qq =sc.nextLine();
System.out.println("checkQQ:"+checkQQ(qq));
}
public static boolean checkQQ(String qq){
String regex ="[1-9][0-9]{4,14}";
// //public boolean matches(String regex)告知此字符串是否匹配给定的正则表达式
return qq.matches(regex);
}
}</span>
举例2:校验邮箱
package check;
import java.util.Scanner;
public class checkMail {
public static void main(String[] args) {
// 键盘录入邮箱
Scanner sc = new Scanner(System.in);
System.out.println("请输入邮箱:");
String email = sc.nextLine();
// 定义邮箱的规则
// String regex =
// "[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,6}(\\.[a-zA-Z_0-9]{2,3})+";
String regex = "\\w+@\\w{2,6}(\\.\\w{2,3})+";
// 调用功能,判断即可
boolean flag = email.matches(regex);
// 输出结果
System.out.println("flag:" + flag);
}
}
举例3:电话号码验证
package check;
import java.util.Scanner;
public class checkTelNum {
public static void main(String[] args) {
//键盘录入手机号码
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的手机号码:");
String phone = sc.nextLine();
//定义手机号码的规则
String regex = "1[38]\\d{9}";
//调用功能,判断即可
boolean flag = phone.matches(regex);
//输出结果
System.out.println("flag:"+flag);
}
}
2、分割功能
public String[] split(String regex)
应用:在征婚网的年龄选择范围,以一个字符串(不然的话要传两个参数)传到后台,后台用分割提取范围!
package split;
import java.util.Scanner;
public class splitWithRegex {
public static void main(String[] args) {
String ages="18-24";
String regex="-";
String[] strArray=ages.split(regex);
int startAge = Integer.parseInt(strArray[0]);
int endAge=Integer.parseInt(strArray[1]);
Scanner sc = new Scanner(System.in);
int age= sc.nextInt();
if(age>=startAge && age<=endAge){
System.out.println("符合");
}else{
System.out.println("不符合");
}
}
}
package split;
public class splitPraticise {
public static void main(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("---------------------");
}
}
3、替换功能
public String replaceAll(String regex,String replacement)
应用:在那些论坛,贴吧,游戏对于敏感词语都会被替换成*或其他的。
package replace;
/*
* 替换功能
* String类的public String replaceAll(String regex,String replacement)
* 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
*/
public class replaceWithRegex {
public static void main(String[] args) {
String s ="iam123luo456wen789jin007";
String regex ="[^0-9]+";
String result=s.replaceAll(regex, "");
System.out.println(result);
}
}
4、获取功能(获取由XXX个字符组成的单词)
Pattern和Matcher类的使用
package get;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class getWithRegex {
public static void main(String[] args) {
String str = "i am WenJin Luo i am hansome";
String regex = "\\b\\w{3,}\\b";
// API:正则表达式的编译表示形式。
// 指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher
// 对象,依照正则表达式,该对象可以与任意字符序列匹配。执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。
// 因此,典型的调用顺序是
// Pattern p = Pattern.compile("a*b");
// Matcher m = p.matcher("aaaaab");
// boolean b = m.matches();
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
//find 方法扫描输入序列以查找与该模式匹配的下一个子序列。
while (matcher.find()) {
// String group()返回由以前匹配操作所匹配的输入子序列。
System.out.println(matcher.group());
}
}
}
声明:此文乃对于观看传智播客Java教学视频个人摘抄,反思写的总结。