正则表达式
-
概述:正确规则的表达式,是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串。其是就是一种规则。有着自己特殊的应用
-
正则表达式的组成规则
字符 x 字符 x。 举例:‘a’表示字符a \\\ 反斜线字符 \n 换行符('\u000A') \r 回车符 ('\u000D') 字符类 [abc] a,b或c(简单类) [^abc] 除了a,b或c之外的任何字符(否定) [a-zA-Z] a到z或A到Z,两头的字母包括在内(范围) [0-9] 0到9的字符都包括 预定义字符类 . 任何字符 .字符本身用\.来表示 \d 数字[0-9] \w 单词字符[a-zA-Z_0-9] \s 匹配空格字符 边界匹配器 ^ 行的开头 $ 行的结尾 \b 单词边界。就是不是单词字符的地方 数量词 X? X,一次或一次也没有 比如""空串就是没有 X* X,零次或者多次,大于等于一次都算作多次 X+ X,一次或者多次 X{n} X,恰好n次 X{n,} X,至少n次 X{n,m} X,至少n次,但是不超过m次
-
正则表达式的判断功能
String类的功能:public boolean matches(String regex)
判断手机号是否符合规则
public class CheckPhoneNUmber { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入手机号"); String phoneNum = sc.nextLine(); String regex="[1][3,5,6,7,8][0-9]{9}"; boolean b = phoneNum.matches(regex); if (b){ System.out.println("格式正确"); }else{ System.out.println("格式错误"); } } }
-
正则表达式的分割功能
split()方法
String类的功能: public String[] split(String regex)
需求:我有如下一个字符串:”91 27 46 38 50”,请写代码实现最终输出结果是:”27 38 46 50 91”
分析:
a: 定义目标字符串"91 27 46 38 50"
b: 对这个字符串进行切割,得到的就是一个字符串数组
c: 把b中的字符串数组转换成int类型的数组
(1): 定义一个int类型的数组,数组的长度就是字符串数组长度
(2): 遍历字符串数组,获取每一个元素.将其转换成int类型的数据
(3): 把int类型的数据添加到int类型的数组的指定位置
d: 排序
e: 创建一个StringBuilder对象,用来记录拼接的结果
f: 遍历int类型的数组, 将其每一个元素添加到StringBuilder对象中
g: 就是把StringBuilder转换成String
h: 输出
public class StringSort { public static void main(String[] args) { String str = "91 27 46 38 50"; String[] split = str.split("\\s+"); int[] arr = new int[split.length]; for (int i = 0; i < split.length; i++) { arr[i]= Integer.parseInt(split[i]); } Arrays.sort(arr); StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < arr.length; i++) { stringBuilder.append(arr[i]).append(" "); } String s = stringBuilder.toString(); System.out.println(s.toString()); } }
-
正则表达式的替换功能
String类的功能: public String replaceAll (String regex ,String replacement )
-
Pattern和Matcher
6.1 概述:正则的获取功能需要使用的类
6.2 模式 和匹配器的典型调用顺序
Pattern p = Pattern.compile(“a*b”)
Matcher m=p.matcher(“aaaaab”);
boolean b= m.matcher();
-
正则表达式的获取功能
Pattern和Matcher的结合使用
使用的是find()方法和group()方法 ,注意:一定要先使用find()方法先找到,才能用group()方法获取出来
需求:获取下面这个字符串中由三个字符组成的单词 正则表达式 \b[a-z]{3}\b
da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?public class ThreeLetter { 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); } } }