Pattern:表示正则表达式
Matcher:文本匹配器,按照正则表达式的规则去读取字符串,从头开始读取,在大串中去找符合匹配规则的子串
package top.aboss; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Hello { public static void main(String[] args) { String str = "Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11," + "因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台。"; // 1. 获取正则表达式对象 Pattern p = Pattern.compile("Java\d{0,2}"); // 2. 获取文本匹配器对象 Matcher m = p.matcher(str); // 3. 利用循环获取 while (m.find()) { String s = m.group(); System.out.println(s); } }
}
package top.aboss; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Hello { public static void main(String[] args) throws IOException { // 创建URL对象 URL url = new URL("https://www.cnblogs.com/longronglang/p/6429260.html"); // 连接上这个网址 URLConnection conn = url.openConnection(); // 创建对象去读取网络中的数据 BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); // 获取正则表达式对象pattern String regex = "[1-9]\\d{17}"; Pattern pattern = Pattern.compile(regex);// 在读取的时候每次读一整行 String line; while ((line = br.readLine()) != null) { Matcher matcher = pattern.matcher(line); while (matcher.find()) { System.out.println(matcher.group()); } } br.close(); } }
每组是有组号的,也就是序号。
就是把这一组的数据捕获出来,再用一次。后续还要继续使用本组的数据,正则内部使用:\组号,正则外部使用:$组号。
package top.aboss; public class Hello { public static void main(String[] args) { // 判断字符串开始和结束是否一致 // \组号 表示把第X组的内容再拿出来用一次 String reg = "(.+).+\1"; System.out.println("a123a".matches(reg)); System.out.println("abc123abc".matches(reg)); // 判断字符串开始和结束是否一致,并且开始部分每个字符需要一致 String reg2 = "((.)\\2*).+\\1"; System.out.println("aaa123aaa".matches(reg2)); // 口吃替换 String reg3 = "(.)\\1+"; System.out.println("我要学学编编编编程程程程程程".replaceAll(reg3, "$1")); } }
分组之后不需要再用本组数据,仅仅是把数据括起来,特点是不占用组号。
package top.aboss; public class Hello { public static void main(String[] args) { // 身份证号码简易正则表达式 String reg = "[1-9]\d{16}(?:\d|X|x)"; System.out.println("41080119930228457x".matches(reg)); } }
(?:) (?=) (?!)都是非捕获分组,更多的是使用第一个。
本文作者:a
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!