【Java】正则表达式—regex(全)

正则表达式(Regular Expression)用于搜索、编辑和操作字符串文本,从左到右匹配文本,每个源字符只匹配一次。

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

目录

字符串内置正则处理方法

模式匹配 Pattern Matcher

基本语法实例


  • 字符串内置正则处理方法

    // 字符串内置正则处理方法
    public static void RegExTest1() {
        // matches() 当仅且当正则匹配整个字符串时返回 true
        System.out.println("-----matches-----");
        System.out.println("Regular".matches("Regular"));
        System.out.println("Regular".matches("Regular "));
        // replaceFirst() 替换首次匹配的字符串片段
        System.out.println("-----replaceFirst-----");
        System.out.println("Regex Regex_ Regex ".replaceFirst("\\w{6}", "First"));
        System.out.println("Regex Regex_ Regex ".replaceFirst("\\w+\\s", "First"));
        // replaceAll() 替换所有匹配的字符 不会改变原str,返回修改后的对象
        System.out.println("-----replaceAll-----");
        System.out.println("RegggexReggexReggggex".replaceAll("g{2,4}", "g"));
        // split() 按匹配的正则表达式切片字符串
        System.out.println("-----split-----");
        for (String item : "Regex Regex  R".split("\\s+")) {
            System.out.println(item);   // Regex Regex R
        }
    }

结果:
-----matches-----
true
false
-----replaceFirst-----
Regex First Regex 
FirstRegex_ Regex 
-----replaceAll-----
RegexRegexRegex
-----split-----
Regex
Regex
R
  • 模式匹配 Pattern Matcher

    // 模式匹配 Pattern Matcher
    public static void RegExTest2() {
        System.out.println("-----Pattern Matcher-----");
        String str = "Regular ,  Expression. ";

        Pattern pat = Pattern.compile("\\w+"); // 创建模式对象 匹配 Regular与Expression
        Matcher mat = pat.matcher(str);        // 创建匹配对象 匹配 str
        while (mat.find()) {
            System.out.print("Start Index: " + mat.start());    // 匹配关系 [start, end)
            System.out.print(" End Index: "+ mat.end() + " ");
            System.out.println(mat.group());    // 没有用()分组,默认打印$0
        }

        System.out.println("-----()-----"); // 添加小括号可以进行分组创建反向引用生成对应片段
        System.out.println(str.replaceAll("(\\w+)(\\s*)([.,])(\\s*)", "$1$3"));
        // Matcher.find(index) 查找下一个匹配的位置,可指定开始下标index
        // 要先find(),找到后才有group()
        // $0 匹配 `(\w+)(\s*)([.,])(\s*)` 结果为 `Regular空格,空格空格` 和 `Expression.空格`
        // $1 匹配 `(\w+)`    结果为 `Regular` 和 `Expression`
        // $2 匹配 `(\s*)`    结果为 `空格` 和 ``
        // $3 匹配 `([.,])`   结果为 `,` 和 `.`
        // $4 匹配 `(\s*)`    结果为 `空格空格` 和 `空格`
        Pattern pat2 = Pattern.compile("(\\w+)(\\s*)([.,])(\\s*)");
        Matcher mat2 = pat2.matcher(str);
        mat2.find();
        System.out.println("$0 : " + mat2.group());
        System.out.println("$1 : " + mat2.group(1));
        System.out.println("$3 : " + mat2.group(3));

        System.out.println("-----(?:)-----");
        // (?:) 小括号内以?:开头可以取消对应分组生成片段
        System.out.println(str.replaceAll("(\\w+)(?:\\s*)([.,])(?:\\s*)", "$1$2"));
    }

结果:
-----Pattern Matcher-----
Start Index: 0 End Index: 7 Regular
Start Index: 11 End Index: 21 Expression
-----()-----
Regular,Expression.
$0 : Regular ,  
$1 : Regular
$3 : ,
-----(?:)-----
Regular,Expression.
  • 基本语法实例

    /*
     * .  匹配所有单个字符,除了换行符(\r与\n)
     * \w 匹配一个单词字符(大小写字母、数字、下划线)[a-zA-Z0-9]
     * \s 匹配一个空格(缩进、换行、垂直tab、换页符)[ \t\n\x0b\r\f]
     * +  匹配一个或多个
     * [] 复选集 元素为或关系 里面的 ,. 自动转为普通字符
     * () 分组 反向引用会保存匹配模式分组的字符串片段
     * {} 个数
     * \d 匹配数字0-9
     * */
    // 基本语法
    public static void RegExTest3() {
        // 字符串中 \n 表示回车,\\n 表示 "\n"
        // 正则表达 .  表示字符,\\. 表示匹配"."
        System.out.println("-----.\\s\\w-----");
        System.out.println("Reg6!\n\rular".replaceAll("R.+", "_"));
        System.out.println("Reg6!\n\nular".replaceAll("\\s", "_"));
        System.out.println("Reg6!\n\rular".replaceAll("R\\w+", "_"));
        // 数字范围匹配
        System.out.println("-----^$-----");
        // 使用^与$注意范围为字符串整体的开始和结尾
        System.out.println(Pattern.compile("0$").matcher("1200\n1205").find()); // false
        System.out.println(Pattern.compile("0$").matcher("1205\n1200").find()); // true
        System.out.println("-----^$2-----");
        String str = "1990 2021 2017 1995 2016";
        Pattern pat = Pattern.compile("199[5-9]|20[0-1][0-6]|2017"); // 匹配1995-2017
        Matcher mat = pat.matcher(str);
        while (mat.find()) {
            System.out.print(mat.group() + " ");
        }

结果:
-----.\s\w-----
_
ular
Reg6!__ular
_!
ular
-----^$-----
false
true
-----^$2-----
2017 1995 2016 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值