正则表达式

小知识来源于廖雪峰老师的博客

简介

正则表达式可以用字符串来描述规则,并用来匹配字符串。一个正则表达式就是一个描述规则的字符串,只需要编写正确的规则,我们就可以让正则表达式引擎去判断目标字符串是否符合规则。是一套标准,java在java.util.regex,使用简单,java用\\表示\。

用正则表达式匹配字符串

1
2
3
4
5
6
7
8
//regex
public class Main{
public static void main(String[] args){
String regex = "20\\d\\d";
sout("2019.matches(regex)");//true
sout("2020.matches(regex)");//false
}
}

匹配规则

  • 精准匹配

    从左到右按照规则匹配。\是转义字符。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Main{
    psvm(String[] args){
    String re1 = "abc";
    sout("abc".matches(re1));//t
    sout("Abc".matches(re1));//f
    sout("abcd".matches(re1));//f

    String re2 = "a\\&c";
    sout("a&c".matches(re2));//t
    sout("a-c".matches(re2));//f
    sout("a&&c".matches(re2));//f
    }
    }
  • 匹配任意字符(.)

    精准匹配用处不大,用String.equals()就可以实现,用 . 来实现模糊匹配,可以匹配任何字符。a.c可以匹配abc,a$c,a%c。但是不能匹配ac,a%%c。只能匹配一个字符。

  • 匹配数字(\d)

    \d可以匹配数字,例如00\d可以匹配008,009。不匹配00A,0077。

  • 匹配常用字符(\w)

    \w匹配一个字母,数字或者下划线

  • 匹配空格(\s)

    不但包括空格字符,还包括tab字符(\t)。

  • 匹配非数字(\D)

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

    • "00A",因为\D可以匹配非数字字符A
    • "00#",因为\D可以匹配非数字字符#

    但是不能匹配007 008这些,类似的,\W可以匹配\w不能匹配的字符,\S可以匹配\s不能匹配的字符,这几个正好是反着来的。

  • 重复匹配( + ? {n})*

    • *:匹配任意个字符,包括0个。A\d*—A,A0,A380

    • +:至少一个字符

    • ?:0个或者一个字符

    • {n}:匹配n个字符。A\d{3}—>A349

    • {n,m}:匹配n-m个字符。A\d{3,5}—>A123,A1234,A12345,没有上限用{n,}

  • 总结:

    正则表达式 规则 可以匹配
    A 指定字符 A
    \u548c 指定Unicode字符
    . 任意字符 ab&0
    \d 数字0~9 0~`9`
    \w 大小写字母,数字和下划线 azAZ0~`9_`
    \s 空格、Tab键 空格,Tab
    \D 非数字 aA&_,……
    \W 非\w &@,……
    \S 非\s aA&_,……
    正则表达式 规则 可以匹配
    A* 任意个数字符 空,AAAAAA,……
    A+ 至少1个字符 AAAAAA,……
    A? 0个或1个字符 空,A
    A{3} 指定个数字符 AAA
    A{2,3} 指定范围个数字符 AAAAA
    A{2,} 至少n个字符 AAAAAAAAA,……
    A{0,3} 最多n个字符 空,AAAAAA

复杂匹配规则

  • 匹配开头和匹配结尾

    表示开头,可以匹配A001A380

  • 匹配指定范围

    […]可以匹配范围内的字符,例如[123456789]匹配1-9,电话号码的规则[123456789]\d{6,7}

    或者[1-9]\d{6,7}

    匹配大小写不限的16进制数,比如,[0-91-fA-F],他可以匹配

    • 0-9
    • a-f
    • A-F
  • 或匹配规则

  • 使用括号

  • 小结

分组匹配

非贪婪匹配

搜索和替换

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

请我喝杯咖啡吧~

支付宝
微信