正则表达式一文通

本文详细介绍了正则表达式的使用,从基本的匹配规则如数字、字母、空格,到复杂的匹配如开头和结尾、指定范围、或规则,再到分组匹配、非贪婪匹配以及搜索和替换操作。通过实例展示了如何在Java中使用正则表达式进行字符串操作,帮助读者全面理解并掌握正则表达式。
摘要由CSDN通过智能技术生成

1 正则表达式简介

使用正则表达式的好处有哪些?

一个正则表达式就是一个描述规则的字符串,所以,只需要编写正确的规则,我们就可以让正则表达式引擎去判断目标字符串是否符合规则。

正则表达式是一套标准,它可以用于任何语言。Java 标准库的 java.util.regex包内置了正则表达式引擎,在 Java 程序中使用正则表达式非常简单。

举个例子:要判断用户输入的年份是否是20##年,我们先写出规则如下:

一共有 4 个字符,分别是:2,0,0~9任意数字,0~9任意数字

对应的正则表达式就是:20\d\d,其中\d表示任意一个数字。

把正则表达式转换为 Jaa 字符串就变成了20\\d\\d,注意Java字符串用\\表示\

最后,用正则表达式匹配一个字符串的代码如下:

public class Main{
   
    public static void main(String[] args){
   
        String regex = "20\\d\\d";
        System.out.println("2019".matches(regex)); // true
        System.out.println("2100".matches(regex)); // false
    }
}

可见,使用正则表达式,不必编写复杂的代码来判断,只需要给出一个字符串表达的正则规则即可。

2 匹配规则

正则表达式的匹配规则是从左到右规则匹配。我们首先来看如何使用正则表达式做精确匹配。

对于正则表达式abc来说,它只能精确地匹配字符串"abc",不能匹配 “ab”, “Abc”, “abcd” 等其他任何字符串。

如果正则表达式有特殊字符,那就需要用\ 转义。例如,正则表达式a\&c来说,对应的 Java 字符串是"a\\&c",因为\也是Java字符串的转义字符,两个\\实际上表示的是一个\:

public class Main {
   
    public static void main(String[] args) {
   
        String re1 = "abc";
        System.out.println("abc".matches(re1));
        System.out.println("Abc".matches(re1));
        System.out.println("abcd".matches(re1));

        String re2 = "a\\&c"; // 对应的正则是a\&c
        System.out.println("a&c".matches(re2));
        System.out.println("a-c".matches(re2));
        System.out.println("a&&c".matches(re2));
    }
}

2.1 匹配非 ASCII 字符

例如中文,那就用\u####的十六进制表示,例如:a\u548cc匹配字符串"a和c",中文字符的Unicode 编码是 548c

2.2 匹配任意字符

精确匹配实际上作用不大,因为我们可以直接用String.equals()就可以做到,大多数情况下,我们想要的匹配规则更多的是模糊匹配。我们可以用.匹配一个任意字符。例如,正则表达式a.c中间的.可以匹配一个任意字符,例如,下面的字符串可以被匹配:

  • abc
  • a&b
  • acc

但它不能匹配 ac、a&&c,因为 .匹配一个字符且仅限一个字符。

2.3 匹配数字

如果我们只想匹配0~9这样的数字,可以用\d匹配。例如,正则表达式00\d可以匹配:

  • 007
  • 008

它不能匹配 00A,0077,因为\d仅限单个数字字符

2.4 匹配常用字符

\w可以匹配一个字母、数字或下划线,w 的意思是 word。例如,java\w可以匹配:

  • javac
  • java9
  • java_

它不能匹配 java#,"java ",因为\w不能匹配 #、空格等字符。

2.5 匹配空格字符

\s可以匹配一个空格字符,注意空格字符不但包括" ",还包括 tab 字符(在 Java 中用 \t表示)。例如,a\sc可以匹配:

  • “a c”
  • “a c”

它不能匹配 ac, abc 等。

2.6 匹配非数字

\d可以匹配一个数字,而\D则匹配一个非数字。例如,00\D可以匹配:

  • 00A
  • 00#

00\d可以匹配的字符串 “007”, “008” 等,00\D是不能匹配的。

类似的,\W可以匹配\s不能匹配的字

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值