上海网站开发团队,厦门35网站建设公司,网站维护 公司简介,wordpress首页导航栏文章目录 1.基本介绍2.正则底层实现1.matcher.find()完成的任务2.matcher.group(0)分析1.源代码2.解释#xff08;不分组#xff09;3.解释#xff08;分组#xff09; 3.总结 3.正则表达式语法1.基本介绍2.元字符的转义符号1.基本介绍2.代码实例 3.字符匹配符1.基本介绍2.… 文章目录 1.基本介绍2.正则底层实现1.matcher.find()完成的任务2.matcher.group(0)分析1.源代码2.解释不分组3.解释分组 3.总结 3.正则表达式语法1.基本介绍2.元字符的转义符号1.基本介绍2.代码实例 3.字符匹配符1.基本介绍2.字符匹配案例一3.字符匹配案例二 4.选择匹配符1.基本介绍2.代码实例 5.正则限定符1.基本介绍2.代码实例 6.正则定位符1.基本介绍2.代码实例 7.捕获分组1.基本介绍2.代码实例 8.非捕获分组1.基本介绍2.代码实例 9.非贪婪匹配代码实例 4.正则应用实例1.题目代码 2.验证复杂URL3.注意事项 5.正则表达式三个常用类1.Pattern类整体匹配代码实例 2.Matcher类代码实例 6.反向引用1.基本介绍2.反向引用案例案例一代码实例案例二——结巴去重代码实例 7.String类型使用正则表达式替换题目一replaceAll题目二matches题目三split按照#、-、~或者数字来分割 8.本章练习练习一练习二练习三 9.正则表达式大全 1.基本介绍 2.正则底层实现
1.matcher.find()完成的任务
根据特定的规则找到满足要求的字符串找到后将索引放到mather对象的属性int[] groups;字符串的第一个字符的索引放到groups[0]最后一个字符的索引加一放到groups[1]
2.matcher.group(0)分析
1.源代码 2.解释不分组
前面的都是做的验证直接看最后一句话传进的参数是0所以返回的是groups[0 * 2] 到 groups[0 * 2 1]也就是截取索引为groups[0]和groups[1]的内容并转换成String类型总结一下group[0]就是返回截取到的整个字符串
3.解释分组
String regStr (\\d\\d)(\\d\\d);上面的这种情况就是分组的情况此时groups数组记录的情况看下图总结一下在分组的情况下group[x]对应groups[y]的下标 x 0 : y 0, 1x 1 : y 2, 3x 2 : y 4, 5以此类推
3.总结
matcher.find()就是查找匹配到的字符串group(0)就是返回整个查找到的字符串group(1)、(2)…就是返回第一组、第二组…匹配的字符串
3.正则表达式语法
1.基本介绍 2.元字符的转义符号
1.基本介绍 2.代码实例
package regexp;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** author 孙显圣* version 1.0*/
public class RegExp02 {public static void main(String[] args) {//内容String content abc$(abc(123(;//要匹配的样式String regStr \\(; //转义符\\//1.传入匹配的样式创建模式对象Pattern compile Pattern.compile(regStr);//2.传入要匹配的内容创建匹配器对象Matcher matcher compile.matcher(content);//3.开始匹配while (matcher.find()) {System.out.println(匹配到 matcher.group(0));}}
}
3.字符匹配符
1.基本介绍 2.字符匹配案例一 package regexp;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** author 孙显圣* version 1.0*/
public class RegExp03 {public static void main(String[] args) {String content a11c8aBC;
// String regStr [a-z]; //a到z
// String regStr [A-Z]; //A到Z
// String regStr (?i)abc; //匹配abc字符串不区分大小写
// String regStr a((?i)bc); //匹配bc不区分大小写
// String regStr abc;String regStr [^a-z]{2}; //匹配非a到z的两个字符Pattern compile Pattern.compile(regStr); //模式对象
// Pattern compile Pattern.compile(regStr, Pattern.CASE_INSENSITIVE); //匹配时不区分大小写Matcher matcher compile.matcher(content);while (matcher.find()) {System.out.println(找到 matcher.group(0));}}
}
3.字符匹配案例二 package regexp;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** author 孙显圣* version 1.0*/
public class RegExp04 {public static void main(String[] args) {String content asdg;String regStr [abcd]; //abcd任意一个字符String regStr1 [^abcd]; //除了abcdString regStr2 [\\d]; //任意数字String regStr3 [\\D]; //任意非数字String regStr4 [\\w]; //任意数字字母下划线String regStr5 [\\W]; //非数字字母下划线String regStr6 [\\s]; //匹配任意空白字符空格制表符等String regStr7 [\\S]; //匹配任意非空白字符String regStr8 [.]; //匹配除了\n以外的任何字符如果要匹配.则需要加\\//模式对象Pattern compile Pattern.compile(regStr);//匹配对象Matcher matcher compile.matcher(content);//开始匹配while (matcher.find()) {System.out.println(匹配到 matcher.group(0));}}
}
4.选择匹配符
1.基本介绍 2.代码实例
package regexp;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** author 孙显圣* version 1.0*/
public class RegExp05 {public static void main(String[] args) {String content hanshunping 韩顺平;String regStr han|韩; //匹配到han或韩Pattern compile Pattern.compile(regStr);Matcher matcher compile.matcher(content);while (matcher.find()) {System.out.println(匹配到 matcher.group(0));}}
}
5.正则限定符
1.基本介绍 2.代码实例
package regexp;/*** author 孙显圣* version 1.0*/
public class RegExp06 {public static void main(String[] args) {String content aaaaaaa11111;String regStr a{3}; //匹配三个aString regStr1 1{4}; //匹配四个1String regStr2 (\\d){2}; //匹配两个数字String regStr3 a{3, 4}; //匹配三到四个a//java默认贪婪匹配默认匹配多的String regStr4 1{4, 5}; //匹配四到五个1String regStr5 \\d{2, 5}; //匹配二到五个数字String regStr6 1; //匹配一个或多个1String regStr7 a*; //匹配任意个aString regStr8 1?; //匹配0个或一个1}
}
6.正则定位符
1.基本介绍 2.代码实例
package regexp;/*** author 孙显圣* version 1.0*/
public class RegExp07 {public static void main(String[] args) {String str1 ^[0-9][a-z]*; //至少一个数字开头任意个小写字母结尾String str2 ^[0-9]\\-[a-z]$; //以一个数字开头后接一个“-”以至少一个小写字母结尾String str3 han\\b; //匹配han的后边界即han后面没东西或者是空格String str5 han\\B; //匹配han的前边界即han前面没东西或者是空格}
}
7.捕获分组
1.基本介绍 2.代码实例
package regexp;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** author 孙显圣* version 1.0*/
public class RegExp08 {public static void main(String[] args) {String content hanshunping s7789 nn1189han;String regStr (\\d\\d)(\\d\\d); //非命名分组String regStr1 (?g1\\d\\d)(?g2\\d\\d); //非命名分组//模式对象Pattern compile Pattern.compile(regStr1);//匹配对象Matcher matcher compile.matcher(content);while (matcher.find()) {
// System.out.println(matcher.group(1)); //分组一
// System.out.println(matcher.group(2)); //分组二//命名分组可以使用编号或者名字System.out.println(matcher.group(g1)); //分组一System.out.println(matcher.group(g2)); //分组二}}
}
8.非捕获分组
1.基本介绍 2.代码实例
package regexp;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** author 孙显圣* version 1.0* 非捕获分组*/
public class RegExp09 {public static void main(String[] args) {String content hello韩顺平教育 jack韩顺平老师 韩顺平同学hello;// String regStr 韩顺平(?:教育|老师|同学); //匹配韩顺平教育韩顺平老师韩顺平同学
// String regStr 韩顺平(?教育|老师|同学); //匹配韩顺平后面有教育|老师|同学的韩顺平也就是三个String regStr 韩顺平(?!教育|老师); //匹配韩顺平后面没有教育|老师的韩顺平也就是只有一个Pattern compile Pattern.compile(regStr);Matcher matcher compile.matcher(content);while (matcher.find()) {System.out.println(matcher.group(0));}}
}
9.非贪婪匹配
代码实例
package regexp;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** author 孙显圣* version 1.0*/
public class RegExp10 {public static void main(String[] args) {String content hello111111;String regStr \\d?;//在限定符后面加?表示非贪婪匹配这里每次就匹配一个1Pattern compile Pattern.compile(regStr);Matcher matcher compile.matcher(content);while (matcher.find()) {System.out.println(matcher.group(0));}}
}
4.正则应用实例
1.题目 代码
package regexp;import org.junit.jupiter.api.Test;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** author 孙显圣* version 1.0*/
public class RegExercise {//汉字public static void main(String[] args) {String content1 史蒂夫;String regStr1 ^[\u3091-\uffe5]$; //匹配至少一个汉字并规定了开头结尾为空Pattern compile Pattern.compile(regStr1);Matcher matcher compile.matcher(content1);if (matcher.find()) {System.out.println(匹配成功);}else {System.out.println(匹配失败);}}//邮政编码 1-9开头的一个六位数Testpublic void find1() {String content1 123458;String regStr1 ^[1-9]\\d{5}$; //匹配1-9开头的一个六位数Pattern compile Pattern.compile(regStr1);Matcher matcher compile.matcher(content1);if (matcher.find()) {System.out.println(匹配成功);}else {System.out.println(匹配失败);}}//qq号码 1-9开头的一个5位到10位数Testpublic void find2() {String content1 1721469477;String regStr1 ^[1-9]\\d{4,9}$; //匹配1-9开头的一个六位数Pattern compile Pattern.compile(regStr1);Matcher matcher compile.matcher(content1);if (matcher.find()) {System.out.println(匹配成功);}else {System.out.println(匹配失败);}}//手机号码 13,14,15,18开头的11位数Testpublic void find3() {String content1 13604959178;String regStr1 ^1(?:3|4|5|8)\\d{9}$; //匹配1-9开头的一个六位数String regStr2 ^1(3|4|5|8)\\d{9}$; //匹配1-9开头的一个六位数Pattern compile Pattern.compile(regStr2);Matcher matcher compile.matcher(content1);if (matcher.find()) {System.out.println(匹配成功);}else {System.out.println(匹配失败);}}
}
2.验证复杂URL
package regexp;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** author 孙显圣* version 1.0*/
public class RegUrl {public static void main(String[] args) {
// String content https://www.bilibili.com/video/BV1fh411y7R8?p894vd_source6ca8808c5ff14bd32a1acd1b4774a821;String content https://www.bilibili.com;String regStr ^((http|https)://)([\\w-]\\.)[\\w-](\\/[\\w-?%.#]*)?$;//注意在[.]指的是真的.Pattern compile Pattern.compile(regStr);Matcher matcher compile.matcher(content);if (matcher.find()) {System.out.println(匹配成功);}else {System.out.println(匹配失败);}}
}
3.注意事项
在使用常规方法验证的时候一定要加定位符^和$
5.正则表达式三个常用类
1.Pattern类
整体匹配 代码实例
package regexp;import java.util.regex.Pattern;/*** author 孙显圣* version 1.0*/
public class RegExp11 {public static void main(String[] args) {//整体匹配不需要添加定位符直接匹配整体String content 我是孙先生12321;String pattern .{5}\\d{5};boolean matches Pattern.matches(pattern, content);System.out.println(matches);}
}
2.Matcher类
代码实例
package regexp;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** author 孙显圣* version 1.0*/
public class RegExp12 {public static void main(String[] args) {String content hello edu jack hello tom hspedu hspedu;String regStr hspedu;Pattern compile Pattern.compile(regStr);Matcher matcher compile.matcher(content);while (matcher.find()) {System.out.println();//分别返回每次匹配到的起始索引和结束索引加一System.out.println(matcher.start());System.out.println(matcher.end());}//整体匹配方法System.out.println(matcher.matches());//把所有的hspedu替换成韩顺平教育不是真的替换因为String是不可变类型的只能返回另一个String类型的对象String s matcher.replaceAll(韩顺平教育);System.out.println(s);}
}
6.反向引用
1.基本介绍 2.反向引用案例
案例一 代码实例
package regexp;import org.junit.jupiter.api.Test;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** author 孙显圣* version 1.0*/
public class RegExp13 {public static void main(String[] args) {String content 1221 jack 5225 jack33 yyy xxx;String regStr (\\d)(\\d)\\2\\1; //每次匹配过后数字都会被记录下来在后面就可以引用Pattern compile Pattern.compile(regStr);Matcher matcher compile.matcher(content);while (matcher.find()) {System.out.println(matcher.group(0));}}//整体匹配检索编号 12321-333999111这样的号码Testpublic void find1() {String content 12321-333999111;String regStr \\d{5}-(\\d)\\1{2}(\\d)\\2{2}(\\d)\\3{2};//获取模式对象Pattern compile Pattern.compile(regStr);//获取匹配器Matcher matcher compile.matcher(content);//整体匹配System.out.println(matcher.matches());}}
案例二——结巴去重 代码实例
package regexp;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** author 孙显圣* version 1.0*/
public class RegExp14 {public static void main(String[] args) {String content 我...我我要....学学学学。。。编程java;String regStr (.)\\1; //匹配所有重复的字符Pattern compile Pattern.compile(regStr); //获取模式Matcher matcher compile.matcher(content); //获取匹配器//在外部反向引用使用$,去重String s matcher.replaceAll($1);System.out.println(s);}
}
7.String类型使用正则表达式替换
题目一replaceAll public static void main(String[] args) {String content 2000年5月JDK1.3、JDK1.4和J2SE1.3相继发布几周后其获得了Apple公司Mac OS X的工业标准的支持。2001年9月24日J2EE1.3发布。2002年2月26日J2SE1.4发布。自此Java的计算能力有了大幅提升与J2SE1.3相比其多了近62%的类和接口。在这些新特性当中还提供了广泛的XML支持、安全套接字Socket支持通过SSL与TLS协议、全新的I/OAPI、正则表达式、日志与断言。2004年9月30日J2SE1.5发布成为Java语言发展史上的又一里程碑。为了表示该版本的重要性J2SE 1.5更名为Java SE 5.0内部版本号1.5.0代号为“Tiger”Tiger包含了从1996年发布1.0版本以来的最重大的更新其中包括泛型支持、基本类型的自动装箱、改进的循环、枚举类型、格式化I/O及可变参数。;//使用正则表达式将jdk1.3和1.4替换成jdkString s content.replaceAll(JDK1\\.3|JDK1\\.4, JDK);System.out.println(s);}题目二matches public static void main(String[] args) {//验证这个手机号是否是138,139开头的String content 13888889999;boolean matches content.matches(^(138|139)\\d{8});System.out.println(matches);}题目三split
按照#、-、~或者数字来分割
package regexp;/*** author 孙显圣* version 1.0*/
public class Regexp15 {public static void main(String[] args) {String content hello#abc-jack12smith~北京;//按照指定符号分割String[] split content.split([#\\-~]);for (String s : split) {System.out.println(s);}}
}
8.本章练习
练习一 package regexp;import java.util.regex.Pattern;/*** author 孙显圣* version 1.0*/
public class HomeWork01 {public static void main(String[] args) {String content 1-721469477qq.com;String regStr [\\w-]([a-zA-Z]\\.)[a-zA-Z];//整体匹配boolean matches Pattern.matches(regStr, content);System.out.println(matches);}
}
练习二 package regexp;/*** author 孙显圣* version 1.0*/
public class HomeWork02 {public static void main(String[] args) {String content1 1223;String content2 -1223;String content3 12.23;String content4 1223;String content5 0.89;//匹配整数或小数String regStr [-]?([1-9]\\d*|0)(\\.\\d)?;boolean matches content5.matches(regStr);System.out.println(matches);}
}
练习三 package regexp;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** author 孙显圣* version 1.0*/
public class HomeWorrk03 {public static void main(String[] args) {String url http://www.sohu.com:8080/abc/dfs/df/index.htm;//分组解析String regStr ^([a-zA-Z])://([a-zA-Z.]):(\\d)[/\\w-]*/([a-zA-Z.])$;Pattern compile Pattern.compile(regStr);Matcher matcher compile.matcher(url);if (matcher.matches()) {System.out.println(协议 matcher.group(1));System.out.println(域名 matcher.group(2));System.out.println(端口 matcher.group(3));System.out.println(文件 matcher.group(4));}else {System.out.println(匹配失败);}}
}
9.正则表达式大全
java正则表达式大全(参考).zip