Java正则表达式

一、介绍

正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

二、正则表达式的规则

  1. 任意一个字符表示匹配任意对应的字符,如a匹配a,7匹配7,-匹配-。

  2. []代表匹配中括号中其中任一个字符,如[abc]匹配a或b或c。

  3. -在中括号里面和外面代表含义不同,如在外时,就匹配-,如果在中括号内[a-b]表示匹配26个小写字母中的任一个;[a-zA-Z]匹配大小写共52个字母中任一个;[0-9]匹配十个数字中任一个。

  4. 在中括号里面和外面含义不同,如在外时,就表示开头,如7[0-9]表示匹配开头是7的,且第二位是任一数字的字符串;如果在中括号里面,表示除了这个字符之外的任意字符(包括数字,特殊字符),如[^abc]表示匹配出去abc之外的其他任一字符。

  5. .表示匹配任意的字符。

  6. \d表示数字。

  7. \D表示非数字。

  8. \s表示由空字符组成,[ \t\n\r\x\f]。

  9. \S表示由非空字符组成,[^\s]。

  10. \w表示字母、数字、下划线,[a-zA-Z0-9_]。

  11. \W表示不是由字母、数字、下划线组成。

  12. ?: 表示出现0次或1次。

  13. +表示出现1次或多次。

  14. *表示出现0次、1次或多次。

  15. {n}表示出现n次。

  16. {n,m}表示出现n~m次。

  17. {n,}表示出现n次或n次以上。

  18. XY表示X后面跟着Y,这里X和Y分别是正则表达式的一部分。

  19. X|Y表示X或Y。

  20. (X)子表达式,将X看做是一个整体。

三、 模式和匹配

Java 中使用正则表达式需要用到两个类,分别为 java.util.regex.Pattern 和 java.util.regex.Matcher。

第一步,通过正则表达式创建模式对象 Pattern。

第二步,通过模式对象 Pattern,根据指定字符串创建匹配对象 Matcher。

第三步,通过匹配对象 Matcher,根据正则表达式操作字符串。

Pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。
Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。
实例:

public class RegexTest {

    public static void main(String[] args) {
        String text = "Hello Regex!";

        Pattern pattern = Pattern.compile("\\w+");
        // Java 中忽略大小写,有两种写法:
        // Pattern pattern = Pattern.compile("\\w+", Pattern.CASE_INSENSITIVE);
        // Pattern pattern = Pattern.compile("(?i)\\w+"); // 推荐写法
        Matcher matcher = pattern.matcher(text);
        // 遍例所有匹配的序列
        while (matcher.find()) {
            System.out.print("Start index: " + matcher.start());
            System.out.print(" End index: " + matcher.end() + " ");
            System.out.println(matcher.group());
        }
        // 创建第两个模式,将空格替换为 tab
        Pattern replace = Pattern.compile("\\s+");
        Matcher matcher2 = replace.matcher(text);
        System.out.println(matcher2.replaceAll("\t"));
    }
}

贪婪与非贪婪模式的匹配
贪婪模式:匹配最长的匹配值
非贪婪模式:匹配最短的匹配值

public class RegexTest {

    public static void main(String[] args) {
        String str = "<div>文章标题</div><div>发布时间</div>";
        // 贪婪模式
        Pattern pattern = Pattern.compile("<div>(?<title>.+)</div>");
        Matcher matcher = pattern.matcher(str);
        while (matcher.find()) {
            System.out.println(matcher.group("title"));
        }

        System.out.println("--------------");

        // 非贪婪模式
        pattern = Pattern.compile("<div>(?<title>.+?)</div>");
        matcher = pattern.matcher(str);
        while (matcher.find()) {
            System.out.println(matcher.group("title"));
        }
    }
}

四、在字符串中使用正则表达式

在 Java 中有四个内置的运行正则表达式的方法,分别是 matches()、split()、replaceFirst()、replaceAll()。注意 replace() 方法不支持正则表达式。

方法描述
s.matches(“regex”)当仅且当正则匹配整个字符串时返回 true
s.split(“regex”)按匹配的正则表达式切片字符串
s.replaceFirst(“regex”, “replacement”)替换首次匹配的字符串片段
s.replaceAll(“regex”, “replacement”)替换所有匹配的字符

实例:

public class RegexTest {

    public static void main(String[] args) {
        System.out.println("wxj".matches("wxj"));
        System.out.println("----------");

        String[] array = "w x j".split("\\s");
        for (String item : array) {
            System.out.println(item);
        }
        System.out.println("----------");

        System.out.println("w x j".replaceFirst("\\s", "-"));
        System.out.println("----------");

        System.out.println("w x j".replaceAll("\\s", "-"));
    }
}

五、常用正则表达式

  1. Email地址:^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$
  2. 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
  3. xml文件:^([a-zA-Z]±?)+[a-zA-Z0-9]+\.[x|X][m|M][l|L]$
  4. IP地址:\d+.\d+.\d+.\d+
  5. 中文字符的正则表达式:[\u4e00-\u9fa5]
  6. 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):^(?=.\d)(?=.[a-z])(?=.*[A-Z]).{8,10}$
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值