1. 正则表达式语法接上
2. 元字符-字符匹配符 883
2.1 应用案例 884-855
代码在com.stulzl.regexp03
RegExp03
package com.stulzl.regexp03;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//演示元字符-字符匹配符 884-885
public 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)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. 元字符-选择匹配符 886
在匹配某个字符串的时候是选择性的,即:既可以匹配这个,又可以匹配那个,这时你需要用到选择匹配符号 I
代码在com.stulzl.regexp04
Regexp04
package com.stulzl.regexp04;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//选择匹配符 886
public 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
用于指定其前面的字符和组合项连续出现多少次
4.1 应用案例
代码在 com.stulzl.regexp05
Regexp05
package com.stulzl.regexp05;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//演示限定符的使用 887
public class Regexp05 {
public static void main(String[] args) {
String content = "a2111111aaaaaahello";
//a{3},1{4},\\d{2}
//String regStr = "a{3}";//表示匹配aaa
//String regStr = "1{4}";//表示匹配1111
//String regStr = "\\d{2}";//表示匹配两个的任意数字字符
//a{3,4},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.regexp06
Regexp06
package com.stulzl.regexp06;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//演示定位符的使用 888
public 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 = "^[0-9]+\\-[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. 分组 889
6.1 常用分组 889
代码在 com.stulzl.regexp07
Regexp07
package com.stulzl.regexp07;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//分组 889
public class Regexp07 {
public static void main(String[] args) {
String content = "hanshunping s7789 nn1189han";
//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 特别分组 890
代码在com.stulzl.regexp08
Regexp08
package com.stulzl.regexp08;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//演示非捕获分组 890
public 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 = "韩顺平(?!教育|老师)";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(content);
while(matcher.find()){
System.out.println("找到:"+matcher.group(0));
}
}
}
7. 非贪婪匹配 891
在限定符后面加?
代码在com.stulzl.regexp09
Regexp09
package com.stulzl.regexp09;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//演示非贪婪匹配 891
public 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));
}
}
}
标签:匹配,String,正则表达式,matcher,语法,Pattern,regStr,顺平
From: https://blog.51cto.com/u_15784725/6370419