JAVA-正则表达式

  • \:转义符
  • ^:以...开头
  • $:以...结尾
  • *:有0个或多个 count>=0
  • +:有1个或多个 count>=1
  • ?:有0个或1个 count=1|count=0

    • [0-9]:范围数字0到9
    • [a-z]:范围a-z
    • [A-Z]:范围A-Z
    • [^0-9]:取反,非0-9
    • [abc]:匹配a,b,c

    • {n} : 匹配n次
    • {n,} : 匹配n次及n次以上
    • {n,m}:匹配n到m次

  • 简介写法
    • \d:匹配一个数字字符,等价于[0-9]
    • \D:匹配一个非数字字符,等价于[^0-9]
    • \s:匹配不可见字符
    • \S:匹配任意可见字符
    • \w:匹配包括下划线在内的任何单词字符
    • 等价于[a-zA-Z0-9_\u4e00-\u9fa5]
    • \W:匹配任何非单词字符

Pattern类

  • 用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建

  • 可以通过Pattern.complie(String regex)创建一个正则表达式

  • 只能做一些简单的匹配操作

Matcher类

  • 构造方法也是私有的,不能随意创建,只能通过Pattern.matcher(CharSequence input)方法得到该类的实例 Matcher m = p.matcher("aaaaab");

  • 支持便捷强大的正则匹配操作,包括分组、多次匹配支持

Matcher三大方法

  • Matcher.matches():对整个字符串进行匹配,只有整个字符串都匹配了才返回true
  • Matcher.lookingAt():对前面的字符串进行匹配,只有匹配到的字符串在最前面才返回true
  • Matcher.find():对字符串进行匹配,匹配到的字符串可以在任何位置

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PhoneGet {
    public static void main(String[] args) {
        String str = "小黑的电话是17317065260小白的电话是17371056700";

        String regex = "((.{2,3})的电话是)(\\d{3})(\\d{4})(\\d{4})";

        Pattern compile = Pattern.compile(regex);
        Matcher matcher = compile.matcher(str);

        while (matcher.find()) {
            System.out.println(matcher.group(3) + "****" + matcher.group(5));
        }
    }
}

去除叠字

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class DIeCi {
    public static void main(String[] args) {
        String str = "我我我。。。。1213要要要123学学。。。编编123123程";

        String regex = "(.)(\\1+)";

        str = str.replaceAll("[^\\u4e00-\\u9fa5]","");

        System.out.println(str);

        Pattern compile = Pattern.compile(regex);
        Matcher matcher = compile.matcher(str);

        while (matcher.find()) {
            str = str.replaceAll(matcher.group(0),matcher.group(1));
        }

        System.out.println(str);
    }
}

你可能感兴趣的:(learn,java)