栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java学习笔记——正则表达式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java学习笔记——正则表达式

正则表达式
          • 元字符
          • 重复匹配
          • 匹配开头和结尾
          • 范围匹配
          • 分组匹配

元字符


matches方法在String类里面就有定义,作用是将字符串与matches括号中的正则表达式进行比较,并且返回boolean值

package Regularexpression;

public class demo3 {
    public static void main(String[] args) {

        //字符精准匹配
        String s1 = "abc";
        System.out.println("abc".matches(s1)); //true
        System.out.println("xyz".matches(s1)); //false

        // . 匹配任意一个字符且仅限一个字符。
        String s2 = "a.c";
        System.out.println("abc".matches(s2)); //true
        System.out.println("abdc".matches(s2)); //false
        System.out.println("a123c".matches(s2)); //false

        // d 匹配单个数字字符,0-9之间
        String s3 = "12\d";
        System.out.println("121".matches(s3)); //true
        System.out.println("1234".matches(s3)); //false

        // w 匹配一个字母、数字或下划线
        String s4 = "ab\w";
        System.out.println("abc".matches(s4)); //true
        System.out.println("ab_".matches(s4)); //true
        System.out.println("ab2".matches(s4)); //true

        // s 匹配一个空格字符(包括空格和t字符)
        String s5 = "\s";
        System.out.println(" ".matches(s5)); //true
        System.out.println("t".matches(s5)); //true

        // d 匹配一个数字字符,而D匹配一个非数字
        String s6 = "\D";
        System.out.println("a".matches(s6)); //true
        // 以上这些,以此类推,小写变成大写后匹配的范围都完全相反
        //w可以匹配单词字符,W匹配非单词字符
        // s匹配空白字符,S匹配非空白字符

    }
}

这里需要注意的是
在正则表达式中是s,d,到了实际写成字符串的时候,都变成了\s,\d

String r2 = “a&c”; 会直接报错,但是String r3 = “n”; 不会报错
说明java中,必须与特定的字符绑定出现。
但是正则表达式中又要用到单个的 来转义特定字符,所以就需要用 \ 来获取一个单个的 ,放到正则表达式里面。因为 \ 中的第一个 会作为转义字符,改变第二个

总而言之一句话,正则表达式中的 在实际写的时候全部换成 \ 就行了

重复匹配
package Regularexpression;

public class demo4 {
    public static void main(String[] args) {
        //重复匹配

        
        //放在元字符后面
        String s1 = "ab\d*";
        System.out.println("ab123".matches(s1)); //true
        System.out.println("ab".matches(s1)); //true
        //放在字符后面
        String ss1 = "abc*";
        System.out.println("ab".matches(ss1)); //true,这里是匹配0个字符c
        System.out.println("abccc".matches(ss1)); //true


        
        //放在元字符后面
        String s2 = "ab\d+";
        System.out.println("ab".matches(s2)); //false,至少一个,不能是0个
        System.out.println("ab123".matches(s2)); //true
        //放在字符后面
        String ss2 = "abc+";
        System.out.println("ab".matches(ss2)); //false,至少包含一个该字符
        System.out.println("abccc".matches(ss2)); //true


        
        //放在元字符后面
        String s3 = "ab\d?";
        System.out.println("ab".matches(s3)); //true
        System.out.println("ab12".matches(s3)); //false
        //放在字符后面
        String ss3 = "abc?";
        System.out.println("ab".matches(ss3)); //true
        System.out.println("abcc".matches(ss3)); //false


        
        //放在元字符后面
        String s4 = "ab\d{3}";
        System.out.println("ab123".matches(s4)); //true
        System.out.println("ab1234".matches(s4)); //false
        //放在字符后面
        String ss4 = "abc{3}";
        System.out.println("abccc".matches(ss4)); //true
        System.out.println("abc".matches(ss4)); //false


        
        //放在元字符后面
        String s5 = "ab\d{2,4}";
        System.out.println("ab10".matches(s5)); //true,注意这里是两个数字字符1和0
        System.out.println("ab2".matches(s5)); //false
        //放在字符后面
        String ss5 = "abc{2,4}";
        System.out.println("abcc".matches(ss5)); //true
        System.out.println("abc".matches(ss5)); //false


        
        //放在元字符后面
        String s6 = "ab\d{2,}";
        System.out.println("ab123".matches(s6)); //true
        System.out.println("ab2".matches(s6)); //false
        //放在字符后面
        String ss6 = "abc{2,}";
        System.out.println("abccc".matches(ss6)); //true
        System.out.println("abc".matches(ss6)); //false
        
    }
}

匹配开头和结尾
package Regularexpression;

public class demo6 {
    public static void main(String[] args) {
        //匹配开头和结尾
        //^表示开头,$表示结尾
        //比如 ^dw$表示开头为d,结尾是w
        String s = "^\d\w$";
        System.out.println("3A".matches(s)); //true
        System.out.println("A3".matches(s)); //false

        // 当然也可以用到字符上
        String ss = "^A.C$";
        System.out.println("ABC".matches(ss)); //true,要是"^AC$"的话就为false
        System.out.println("XYZ".matches(ss)); //false
    }
}

范围匹配
package Regularexpression;

public class demo7 {
    public static void main(String[] args) {
        //匹配指定范围
        
        String s = "[0-9]A";
        System.out.println("3A".matches(s)); //true
        System.out.println("AA".matches(s)); //false

        //在括号里面写上^,可以用作排除法
        //[^1-9]{2}就是匹配除了数字之外的任意两个字符
        String s2 = "[^1-9]{2}";
        System.out.println("ab".matches(s2)); //true
        System.out.println("12".matches(s2)); //false
    }
}

分组匹配
package Regularexpression;

import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class demo8 {
    public static void main(String[] args) {
        // ()先把要提取的规则分组
        // 比如(d*)(w*)分成两部分,前一部分匹配数字字符,后一部分匹配单词字符
        String s = "(\d*)(\w*)";
        System.out.println("123abc".matches(s));  //true

        // 按括号匹配子串
        // group括号里面的参数对应第几个子串,序号从1开始
        // group(0)返回整个字符串
        Pattern p = Pattern.compile("(\d{1,3})(\d{1,3})");
        Matcher m = p.matcher("12345");
        if(m.matches()){
            System.out.println(m.group(0)); //12345
            System.out.println(m.group(1)); //123
            System.out.println(m.group(2)); //45
        }

    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/314472.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号