1.正则表达式语法连接2.元字符-字符匹配符883
2.1应用案例884-855代码com.stulzl.regexp03regexp0package com.stulzl.regexp03;import java.util.regex.Matcher;import java.util.regex.Pattern;///演示元字符-字符匹配符匹配符 84-885 class RegExp03 { public static void main(String[] args) { String content = a11c8abc _ABC y@"; //String regStr = "[a-z]";///匹配a-z之间的任何字符 //String regStr = "[A-Z]";///匹配A-Z之间的任何字符 //String regStr = "abc";///匹配abc字符串(默认区分大小写) //说明(/说明(i)不区分大小写的意思,a(?i)不区分大小写的意思,a(?i)bc代表bc不区分大小写,a((?i)b)c表示b不区分大小写作 //String regStr = "(?i)abc";///匹配abc字符串(不区分大小写) //String regStr = "[0-9]";///匹配0-9之间的任何字符 //补充说明:如果后面带{} 例如[^a-z]{2},任何两个连续字符不在a-z之间匹配 //String regStr = "[^a-z]";///匹配任何不在a-z之间的字符 //补充说明:如果后面带{} 例如[0-9]{2},任何两个连续字符不在0-9之间匹配 //String regStr = "[^0-9]";///任何不在0-9之间匹配的字符 //String regStr = "[abcd]";////在abcd之间匹配任何字符 //String regStr = "[^abcd]";///匹配任何不在abcd之间的字符 //String regStr = "\\D";///任何不在0-9之间匹配的字符() 即非数字 //String regStr = "\\w";//匹配 大小写英文字母, 数字,下划线 //String regStr = "\\W";//匹配 等价于 [^a-zA-Z0-9_] //String regStr = "\\s";// \\s 匹配任何空白字符(空格,制表符等) //String regStr = "\\S";//\\S 匹配任何非空白字符 ,和\\s 刚好相反 String regStr = ".";// . 匹配出 \n 所有以外的字符,如果需要匹配,则需要使用本身 \\. Pattern pattern = Pattern.compile(regStr); ///解释当创建Pattern对象时,指定Pattern.CASE_INSENSITIVE,表示字母大小写字母不区分 //Pattern pattern = Pattern.compile(regStr,Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(content); while(matcher.find()){ System.out.println(”发现:""+matcher.group(0)); } }}
3.元字符-选择匹配符8866在匹配一个字符串时,它是有选择性的,也就是说,你可以匹配这个和那个。此时,您需要选择匹配符号I
com中的代码.stulzl.regexp04regexp04package com.stulzl.regexp04;import java.util.regex.Matcher;import java.util.regex.Pattern;///选择匹配符 886public class Regexp04 { public static void main(String[] args) { //即:可以匹配这个,也可以匹配那个,此时,您需要使用匹配符号的选择 | String content = "hanshunping 韩 寒冷"; String regStr = "han|韩|寒"; Pattern pattern = Pattern.compile(regStr); Matcher matcher = pattern.matcher(content); while(matcher.find()){ System.out.println(”发现:""+matcher.group(0)); } }}
4.元字符-限定符887指定前面的字符和组合项连续出现多少次?
comm4.1应用案例代码.stulzl.regexp05regexppackage com.stulzl.regexp05;import java.util.regex.Matcher;import java.util.regex.Pattern;///使用演示限定符 887public class Regexp05 { public static void main(String[] args) { String content = “a21111aaaaaaahelo”; //a{3},1{4},\\d{2} //String regStr = "a{3}";//表示匹配aaa //String regStr = "1{4}";//表示匹配11111 //String regStr = "\\d{2}";///表示匹配两个任意数字符 //a{3,1{4,5},\\\},d{2,5} //细节:java 默认贪婪匹配的匹配,即尽可能多的匹配 //String regStr = "a{3,4}"; //表示匹配 aaa 或者 aaaa //String regStr = "1{4,5}"; //表示匹配 1111 或者 11111 //String regStr = "\\d{2,5}"; //匹配 2 位数或者 3,4,5位 //1+ (解释+ 简单讲 1-多) //String regStr = "1+";//匹配一个 1 或者多个 1 //String regStr = "\\d+"; //匹配一个数字或多个数字 //1* (解释* 简单讲 0-多) //String regStr = "1*"; //匹配 0 个 1 或者多个 1 //演示?使用,遵守贪婪匹配 (解释? 简单讲 0或者1) String regStr = "a1?";//匹配 a 或者 a1 Pattern pattern = Pattern.compile(regStr); Matcher matcher = pattern.matcher(content); while(matcher.find()){ System.out.println(”发现:""+matcher.group(0)); } }}
5.元字符-888定位符定位符定位符,规定要匹配的字符串的位置,如字符串的开始或结束,这也很有用,必须掌握
com中的代码.stulzl.regexp06regexp06package com.stulzl.regexp06;import java.util.regex.Matcher;import java.util.regex.Pattern;///使用演示定位符 888public class Regexp06 { public static void main(String[] args) { //String content = "123-abc"; String content = "hanshunping sphan nnhan"; //以至少 1 数字开头,接管任何小写字母的字符串 //String regStr = "^[0-9]+[a-z]*"; //以至少 1 数字开头, 至少一个小写字母必须结束 //String regStr = "^[0-9]+[a-z]+$"; //以至少 1 数字开头, 至少一个小写字母必须结束,中间有一个 - //String regStr = \\\\-[a-z]+$"; //表示匹配边界的han(这里的边界是指匹配字符串的结尾,也可以是空格子字符串的后面) //String regStr = "han\\b"; String regStr = "han\\B";与\\b相反 Pattern pattern = Pattern.compile(regStr); Matcher matcher = pattern.matcher(content); while(matcher.find()){ System.out.println(”发现:""+matcher.group(0)); } }}
6.8896.1常用的分组889com中的代码.stulzl.regexp07regexp07package com.stulzl.regexp07;import java.util.regex.Matcher;import java.util.regex.Pattern;//分组 889public class Regexp07 { public static void main(String[] args) { String content = "hanshunping s7789 nn189han"; //String regStr = "\\d\\d\\d\\d";///匹配四个数字的字符串 ///以下是非命名分组 //说明 // 1. matcher.group(0) 得到匹配的字符串 // 2. matcher.group(1) 得到匹配的字符串的第 1 个分组内容 // 3. matcher.group(2) 得到匹配的字符串的第 2 个分组内容 //String regStr = "(\\d\\d)(\\d\\d)"; ///命名分组,即可给分组取名 String regStr = "(?\\d\\d)(?\\d\\d)"; Pattern pattern = Pattern.compile(regStr); Matcher matcher = pattern.matcher(content); while(matcher.find()){ System.out.println(”发现:""+matcher.group(0)); System.out.println("第 1 个组内容=” + matcher.group(1)); System.out.println("第 1 分组内容[通过组名]= + matcher.group(g1); System.out.println("第 2 个组内容=” + matcher.group(2)); System.out.println("第 2 分组内容[通过组名]= + matcher.group(g2); } }}
6.2特别分组890com中的代码.stulzl.regexp08regexp08package com.stulzl.regexp08;import java.util.regex.Matcher;import java.util.regex.Pattern;//演示非捕获分组 890public class Regexp08 { public static void main(String[] args) { String content = "hello 韩顺平教育 jack 韩顺平老师 韩顺平同学 hello 韩顺平学生”“韩顺平学生”; // 找到 韩顺平教育 、韩顺平老师,韩顺平同学 子字符串 //String regStr = “韩顺平教育|韩顺平老师|韩顺平同学”; //上面的写法可以等同于非捕获分组, 注意:不能 matcher.group(1) //String regStr = 韩顺平():教育|教师|同学”; //找到 韩顺平 这个关键词,但要求只是找韩顺平教育和 韩顺平老师 其中包含的韩顺平 ///下面也是非捕获分组,不能使用 matcher.group(1) //String regStr = 韩顺平()=教育|教师)"; //找到 韩顺平 这个关键词,但要求只是搜索 不是 (韩顺平教育 和 韩顺平老师) 其中包含的韩顺平 ///下面也是非捕获分组,不能使用 matcher.group(1) String regStr = 韩顺平()=教育|教师)"; //找到 韩顺平 这个关键词,但要求只是搜索 不是 (韩顺平教育 和 韩顺平老师) 其中包含的韩顺平 ///下面也是非捕获分组,不能使用 matcher.group(1) String regStr = 韩顺平(!教育|教师)"; Pattern pattern = Pattern.compile(regStr); Matcher matcher = pattern.matcher(content); while(matcher.find()){ System.out.println(”发现:""+matcher.group(0)); } }}
7.非贪匹配891添加到限定符后面?
com中的代码.stulzl.regexp09Regexp09package com.stulzl.regexp09;import java.util.regex.Matcher;import java.util.regex.Pattern;//演示非贪婪匹配 891public class Regexp09 { public static void main(String[] args) { String content = hello111111 ok"; //String regStr = "\\d+";///默认贪婪匹配 String regStr = "\\d+?";//非贪婪匹配 Pattern pattern = Pattern.compile(regStr); Matcher matcher = pattern.matcher(content); while(matcher.find()){ System.out.println(”发现:""+matcher.group(0)); } }}