package com.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexDemo {
public static void main(String[] args) {
/*
* 1,匹配
* 使用String类中的matches
*/
//匹配演示
functionDemo_1();
/*
* 2,切割
* 使用String类中的split
*/
//切割演示
functionDemo_2();
/*
* 3替换
* 使用String类中的replaceAll
*/
functionDemo_3();
/*
* 4获取
* 其他三个功能内部最终使用的都是Pattern正则表达式对象
* 现在需要其他功能的时候,字符串String类中没有对应的方法,只能找Pattern
* Pattren对象的使用原理:
* 1.将正则表达式字符串编译成正则对象pattern.
* 2.通过pattern对象获取Matcher对象(匹配器对象)。
* 3.通过匹配器对象对字符串进行规则的匹配,结果都在匹配器中
* 4.通过匹配器对象的功能获取结果。
* Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
*
*/
functionDemo_4();
}
private static void functionDemo_4() {
String str = "da jia zhu yi le,ming tian fang jia le!";
String regex1 = "\\b[a-zA-Z]{3}\\b";//取出由三个字母组成的单词。
//1.获取正则表达式对象。
Pattern p = Pattern.compile(regex1);
//2.和要操作的字符串关联,获取对应的匹配器对象。
Matcher m = p.matcher(str);
System.out.println(str);
while(m.find())
{
System.out.println(m.start()+"..."+m.group()+"..."+m.end());
System.out.println(str.substring(m.start(), m.end()));
}
}
public static void functionDemo_3() {
System.out.println("多个替换为一个");
String str = "wert@@@@@@yuios#####dfgh";
String regex = "(.)\\1+";
//在参数列表中,其他参数要使用之前参数中的规则的组,需要使用$组编号
str =str.replaceAll(regex, "$1");
System.out.println(str);
System.out.println("手机号打码");
String s="13964233168";
s=s.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
System.out.println(s);
}
public static void functionDemo_2() {
System.out.println("切割演示");
//String str = "zhangsan lisi wangwu" ;
//String regex = " +";//一个或多个空格
// String str = "zhangsan.lisi.wangwu";
// String regex="\\.";//直接用点是任意匹配
String str = "ert###yuixkkkkcvbn";//连续的叠词作为切割的标准
//正则规则的复用,想复用先封装
//用小括号()封装,有编号,从1开始。规则中被()封装的称之为组
//直接通过编号对组进行调用
//()\\1在使用已有的第一组内容。原则先有组,才可以使用对应的编号
/*
* 捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组:
1 ((A)(B(C)))
2 \A
3 (B(C))
4 (C)
组0始终表示整个表达式
*/
String regex="(.)\\1+";//使用已有的第一组规则
String[] strs = str.split(regex);
for(String s:strs)
{
System.out.println("-"+s+"-");
}
}
public static void functionDemo_1() {
/*
* 匹配手机号
* 要求:第一位为1,第二位358,一共11位
*/
System.out.println("匹配演示");
String str = "18600002346";
//第一位为1,第二位在358中选一个,之后连续9个任意数字
String regex = "1[358]\\d{9}";
boolean b= str.matches(regex);
System.out.println(str+":"+b);
}
}
正则表达式的使用Demo1--4个主要功能
最新推荐文章于 2024-07-29 14:22:26 发布