替换 replaceAll(String regex, String replacement)
package cn.itcast.regex; import java.util.Arrays; /* 匹配 matches() 切割 split() 看有多少组就看有多少对括号,依次从左往右的每一对括号就为第几组 ((A)(B(C))) 第一组:((A)(B(C))) 第二组:(A) 第三组:(B(C)) 第四组:(C) \1 引用第一组所匹配到的内容 替换 replaceAll(String regex, String replacement) 查找 */ public class Demo3 { public static void main(String[] args) { // TODO Auto-generated method stub //需求:编写一个正则表达式匹配一个手机号 /*matchesPhone("13835026666"); matchesTel("020-38325125"); testSplit1(); testSplit2();*/ replaceTest1(); replaceTest2(); } public static void matchesPhone(String phone) { //String reg="1[34578]\\d{9}"; System.out.println(phone.matches("1[34578]\\d{9}")?"合法手机号":"非法手机号"); } //需求2:匹配固定电话 public static void matchesTel(String tel) { System.out.println(tel.matches("0\\d{2,3}-[1-9]\\d{6,7}")?"合法固话":"非法固话"); } //按照空格切割 public static void testSplit1() { String str="明 天 放 假"; String[] datas=str.split(" +"); System.out.println("数组的元素:"+Arrays.toString(datas)); } //根绝重叠词进行切割 public static void testSplit2() { String str="大家家家明天天玩得得得得得得得得得得得开心"; String[] datas=str.split("(.)\\1+");//如果正则的内容需要被复用,那么需要对正则的内容进行分组。分组的目的就是为了提高正则的复用性。组号不能指定,组号是从1开始 System.out.println("数组的元素:"+Arrays.toString(datas)); } //替换 public static void replaceTest1() { String str="如果需求请联系我13556082126如果需求请联系我13556082126如果需求请联系我13556082126如果需求请联系我13556082126如果需求请联系我13556082126如果需求请联系我13556082126"; String reg="1[34578]\\d{9}"; str=str.replaceAll(reg, "****"); System.out.println("被替换的内容是:"+str); } public static void replaceTest2() { String str="我我我要要要做做做项项项项项项目目";//还愿结巴的话--------->我要做项目 把重叠词替换成单个单词 str=str.replaceAll("(.)\\1+", "$1");//如果需要在replaceAll方法正则的外部引用组的内容,那么是使用 "$组号" System.out.println(str); } } 结果: 被替换的内容是:如果需求请联系我****如果需求请联系我****如果需求请联系我****如果需求请联系我****如果需求请联系我****如果需求请联系我**** 我要做项目
查找
查找
查找需要使用的对象:
1.Pattern(正则对象)
2.Matcher(匹配器对象)
指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配。
执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。
因此,典型的调用顺序是
Pattern p = Pattern.compile("正则");
Matcher m = p.matcher("字符串");
boolean b = m.matches();
匹配器要使用到的方法
1.find() 通知匹配器去匹配字符串,查找符合规则的字符串,如果能查找到符合规则的字符串,则返回true,否则返回false
2.group() 获取符合规则的字串
注意:使用group方法的时候一定要先调用find方法让匹配器去查找符合规则的字符串,否则报错
单词边界匹配器
\b 单词边界匹配器只是代表了单词的开始或者是结束部分,不匹配任何的字符
和空格什么的字符不一样
public class Demo5 { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("hello world".matches("hello\\b world")); } } 结果: true
package cn.itcast.regex; import java.util.regex.Matcher; import java.util.regex.Pattern; /* 查找 查找需要使用的对象: 1.Pattern(正则对象) 2.Matcher(匹配器对象) 指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配。 执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。 因此,典型的调用顺序是 Pattern p = Pattern.compile("正则"); Matcher m = p.matcher("字符串"); boolean b = m.matches(); 匹配器要使用到的方法 1.find() 通知匹配器去匹配字符串,查找符合规则的字符串,如果能查找到符合规则的字符串,则返回true,否则返回false 2.group() 获取符合规则的字串 注意:使用group方法的时候一定要先调用find方法让匹配器去查找符合规则的字符串,否则报错 */ public class Demo4 { public static void main(String[] args) { // TODO Auto-generated method stub //找出三个字母组成的单词 String content="da jia de jia qi wan bi liao hai kai xin ma"; String reg="\\b[a-zA-Z]{3}\\b"; //先要把字符串的正则编译成Pattern对象 Pattern p=Pattern.compile(reg); //使用正则对象匹配字符串用于产生一个Matcher对象 Matcher m=p.matcher(content); /*System.out.println("有符合规则的字符串吗?"+m.find()); System.out.println("获取结果:"+m.group());*/ while (m.find()) { System.out.println(m.group()); } } } 结果: jia jia wan hai kai xin
在正则中,想要匹配一个点(.)的话,必须使用\.来匹配。再使用反斜杠,就是\\.