目录
正则表达式概念
是指正确规则的表达式,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。其实就是一种规则。
正则表达式的组成规则
String regx = "a"; //最简单的正则 匹配a这个字符
regx = "[a,b,c]";//[] 是我列表中的某一个
regx = "[a,b,c,A,B,C,0,1,2,3]";
regx = "[123456789]";
regx = "[a-z]";
regx = "[A-Z]";
regx = "[0-9]";
regx = "[a-zA-Z0-9]";
regx = "[^0-9]"; //不是数字 ^取反
regx = "."; //匹配单个任意字符
regx = "..";
regx = "\\."; //\\转义字符 \\. 只代表.本身
regx = "a|b"; // | 或
regx = "\\|";// \\转义字符
regx = "\\d"; //\\d 和他的意思[0-9] 一样
regx = "\\D"; //\\D 和他的意思[^0-9] 一样
regx = "\\w";// 跟[a-zA-Z_0-9] 意思一样
regx = "\\W";// 跟[^a-zA-Z_0-9] 意思一样
regx = "\\s"; //匹配空格字符
regx = "\\S";//不是空格
regx = "[0-9a-zA-Z]+"; //+ 一次或多次
regx = "[a-z]*"; //零次或多次 大于等于1次 都算多次
regx = "[A-Z]?"; //零次或1次
regx = "[0-9]{5,}"; //至少5次
regx = "[0-9]{5,15}"; //大于等于5 小于等于15
regx = "[0-9]{11}"; //正好11次
[\u4e00 -\u9fa5] //匹配中文
正则表达式的匹配使用格式
需要匹配的字符串s.matches(正则表达式regex)
举例,对qq号的匹配
规则:1. 5-15位
2.不能以0开头
import java.util.Scanner;
public class MyTest {
public static void main(String[] args) {
while (true) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入正确的qq号");
String s = sc.next();
boolean flag = checkQQNumber(s);
if (flag) {
System.out.println("规则正确");
break;
} else {
System.out.println("规则错误");
}
}
}
private static boolean checkQQNumber(String s) {
String str = "[1-9][0-9]{4-14}";
boolean flag = s.matches(str);
return flag;
}
}
正则表达式的替换功能
例有一字符串
String s = "张三dadasdasdsa512李四54546sdsadswdwfgz王五5898hhyhxx";
获取张三-李四-王五
String str = s.replaceAll("[\\w]+","-");
正则表达式的分割功能
得到一个字符串数组
有一字符串 "91 27 46 38 50 101 1 100 2 200 30"
把它变成 "1 2 27 30 38 46 50 91 100 101 200"
public class MyTest {
public static void main(String[] args) {
String str = "91 27 46 38 50 101 1 100 2 200 30";
String[] s = str.split("\\s+");
int[] arr = new int[s.length];
for (int i = 0; i < arr.length; i++) {
arr[i]=Integer.parseInt(s[i]);
}
Arrays.sort(arr);
StringBuilder b = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
b.append(arr[i]);
} else {
b.append(arr[i]).append(" ");
}
}
System.out.println(b.toString());
}
}
正则表达式的获取功能 Pattern和Matcher类
//Pattern 模式器,用来封装一个正则表达式
Pattern p = Pattern.compile("a*b");
//通过匹配器获取一个模式器,并传入待匹配数据
Matcher m = p.matcher("aaaaab");
//使用匹配器中的matches() 看待匹配数据,是否符合正则。
boolean b = m.matches();
System.out.println(b);
//如果你仅仅只是看一个数据是否符合正则,那就你用字符串中的matches()方法
boolean b1 = "aaaaab".matches("a*b");
System.out.println(b1);
提取下面三个字符的单词
da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?
常规做法
String str = "da jia ting wo shuo, jin tian yao xia yu, bu shang wan zi xi, gao xing bu?";
//1.替换掉逗号,问号
String s = str.replace(",", "").replace("?", "");
System.out.println(s);
//2.切割字符串
String[] strArr = s.split("\\s+");
//3.遍历数组,判断元素长度=3的再次使用sb 再次拼接成字符串
StringBuilder sb = new StringBuilder();
for (int i = 0; i < strArr.length; i++) {
if (strArr[i].length() == 3) {
sb.append(strArr[i]).append(" ");
}
}
String s1 = sb.toString().trim();
System.out.println(s1);
//4.再次截取我刚才拼接的字符串。
String[] arr = s1.split("\\s+");
用Pattern和Matcher做
要用到find()和group()方法
先 find () 后 group () , 找到后才能提取
public class MyTest {
public static void main(String[] args) {
String str = "da jia ting wo shuo, jin tian yao xia yu, bu shang wan zi xi, gao xing bu?";
String regex = "\\b[a-z]{3}\\b";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
while (m.find()) {
String group = m.group();
System.out.println(group);
}
}
}