• 初学者必备——三大类18条Java正则表达式语法


    关于Java中的正则表达式语法,既然是基础知识,那我们就从概念说起了。

      概念与作用  

    正则表达式是一串字符,它描述了一个文本模式,利用它可以方便地处理文本,包括文本的查找、替换、验证、切分等。

      字符的分类  

    正则表达式中的字符有两类:

    普通字符:匹配字符本身

    元字符:有特殊含义的字符

    这些元字符及其特殊含义构成了正则表达式的语法。

      单个字符  

    大部分的单个字符就是用字符本身表示的,比如字符“a”,“b”,“c”,“1”,“2”,“3”等。但有一些单个字符使用多个字符表示,这些字符都以斜杠 '\' 开头,比如:

    1)特殊字符

    举例:

    tab字符'\t'

    换行符'\n'

    回车符'\r'

    2)八进制表示的字符

    以\0开头,后跟1~3位数字,比如\0141,对应的是ASCII编码为97的字符,即字符'a'。

    3)十六进制表示的字符

    以\x开头,后跟两位字符,比如\x6A,对应的是ASCII编码为106的字符,即字符'j'。

    4)Unicode编号表示的字符

    以\u开头,后跟4位字符,比如\u9A6C,表示的是中文字符'马',这只能表示编号在0xFFFF以下的字符,如果超出0ⅩFFFF,使用\x{...}形式,比如\x{1f48e}。

    5)斜杠\本身

    斜杠\是一个元字符,如果要匹配它自身,使用两个斜杠表示,即'\\'。

    6)元字符本身

    除了 '\',正则表达式中还有很多元字符,比如.、*、? 、+等,要匹配这些元字符自身,需要在前面加转义字符'\',比如'\.'。

      字符组  

    字符组的种类很多,包括:任意字符、多个指定字符之一、字符区间、排除型字符组、预定义的字符组等。

    1️⃣ 点号字符'.'是一个元字符,默认模式下,它匹配除了换行符以外的任意字符。

    举例:既可以表示“abc” 也可以表示"adc"

    a.c

    2️⃣ 如果想真正的匹配包括换行符在内的任意字符,则可以使用单行匹配模式或者点号匹配模式。在正则表达式中,以(? s)开头,s表示single line,即可指定单行匹配模式

    举例:指定单行匹配模式

    (? s)a.c

    3️⃣ 在单个字符和任意字符之间,有一个字符组的概念,匹配组中的任意一个字符,用中括号[]表示。

    举例:匹配a、b、c中的任意一个字符

    [abc]

    4️⃣ 字符组中可以使用连字符'-'来表示连续的多个字符

    [0-9]

    [a-zA-Z]

    注意:在字符组中,'-'是一个元字符,如果要匹配它自身,可以使用转义,即'-',或者把它放在字符组的最前面。

    举例:

    [-0-9]

    [-a-zA-Z]

    5️⃣ 在[后紧跟一个 ^ 字符,表示排除

    举例:匹配除了a, b, c,以外的任意一个字符

    [^abc]

    注意:排除不是不能匹配,而是匹配一个指定字符组以外的字符,要表达不能匹配的含义,需要使用环视语法。^只有在字符组的开头才是元字符,如果不在开头,就是普通字符,匹配它自身。

    举例:匹配字符a, ^或b

    [a^b]

    6️⃣ 在字符组中,除了^、-、[ ]、\外,其他在字符组外的元字符不再具备特殊含义,变成了普通字符,比如字符'.'和'*', [.*]就是匹配'.'或者'*'本身。

      量词  

    量词指的是指定出现次数的元字符,有三个常见的元字符:+、*、?

    1)+

    表示前面字符的一次或多次出现,比如正则表达式ab+c,既能匹配abc,也能匹配abbc,或abbbc。

    2)*

    表示前面字符的零次或多次出现,比如正则表达式ab*c,既能匹配abc,也能匹配ac,或abbbc。

    3)?

    表示前面字符可能出现,也可能不出现,比如正则表达式ab? c,既能匹配abc,也能匹配ac,但不能匹配abbc。

    更为通用的表示出现次数的语法是{m, n},逗号左右不能有空格,出现次数从m到n,包括m和n,如果n没有限制,可以省略,如果m和n一样,可以写为{m}

    举例:与ab+c等价的写法

    ab{1, }c

    相信大家在掌握了正则表达式的语法后,再去处理文本的查找、替换、验证、切分等场景时会易如反掌。

  • 相关阅读:
    Kotlin语法入门-密封类和密封接口(11)
    关于ORACLE 分区表的介绍
    设计模式:适配器模式
    【Verilog】HDLBits题解——Verification: Reading Simulations
    【C++】一文带你走入vector
    C#、TypeScript 之父 Anders Hejlsberg:“会用 Excel 的,都是程序员 ”
    Springboot入门
    【C++笔试强训】第十天
    网络工程师考核的一些常见的问题:WLAN、BGP、交换机
    洛谷P1607 Fair Shuttle G
  • 原文地址:https://blog.csdn.net/JACK_SUJAVA/article/details/126971425