可以使用单引号代替尖括号

发布时间:2025-06-24 17:40:13  作者:北方职教升学中心  阅读量:778


匹配一组字符

    • 4.1、使用元字符

      5.1、重复匹配

      • 6.1、
      • A-z,匹配从ASCIⅡ字符A到ASCI字符z的所有字母。

      在这里插入图片描述

      4.3、

      在这里插入图片描述

      8.2、回溯引用

      • 9.1、向前查找

        向前查找指定了一个必须匹配但不在结果中返回的模式。匹配纯文本

        有多个匹配结果,使用全局匹配:
        在这里插入图片描述

        字母大小写,使用i标志忽略大小写:
        在这里插入图片描述

        Stringstr ="Hello, my name is Ben. \n"+"Please visit my website at http:www.baidu.com.";//全局匹配Stringpattern ="my";Patternr =Pattern.compile(pattern);Matcherm =r.matcher(str);while(m.find()){System.out.println(m.group());}//忽略大小写pattern ="h";r =Pattern.compile(pattern,Pattern.CASE_INSENSITIVE);m =r.matcher(str);while(m.find()){System.out.println(m.group());}

        3.2、单词边界

      • 7.2、回溯引用

        9.1、Java中的正则表达式

        2.1、它是一个非捕获匹配。

        Stringcontent ="Windows2000 Windows3.1";StringregStr ="Windows(?!95|98|NT|2000)";Patternpattern =Pattern.compile(regStr);Matchermatcher =pattern.matcher(content);while(matcher.find()){System.out.println(matcher.group(0));// System.out.println(matcher.group(1));//错误,并不会捕获分组}Stringres =matcher.replaceAll("@@@@@");System.out.println(res);// Windows// Windows2000 @@@@@3.1

        3、向后查找

      • 10.3、回溯引用匹配
      • 9.2、例如,'Windows (?!95|98|NT|2000)'匹配"Windows 3.1"中的"Windows",但是不匹配"Windows 2000"中的"Windows"。

        操作符说明
        (?=)正向前查找
        (?!)负向前查找
        (?<=)正向后查找
        (?<!)负向后查找
        Stringstr ="I paid $30 for 100 apples,\n"+"50 oranges, and 60 pears.\n"+"I saved $5 on this order.";//只查找数量,负向后查找,匹配结果只包含那些不以$开头的数值Stringpattern ="\\b(?<!\\$)\\d+\\b";Patternr =Pattern.compile(pattern);Matcherm =r.matcher(str);while(m.find()){System.out.println(m.group());}
  • Stringcontent ="hanshunping s7789 nn1189han";StringregStr ="(\\d\\d)(\\d\\d)";Patternpattern =Pattern.compile(regStr);Matchermatcher =pattern.matcher(content);while(matcher.find()){System.out.println(matcher.group(0));System.out.println(matcher.group(1));System.out.println(matcher.group(2));}// 7789// 77// 89// 1189// 11// 89

    命名捕获 (?<name>pattern)
    将匹配的子字符串捕获到一个组名称或编号名称中。回溯引用在替换操作中的应用

  • 9.3、

    Stringcontent ="Windows2000 Windows3.1";StringregStr ="Windows(?=95|98|NT|2000)";Patternpattern =Pattern.compile(regStr);Matchermatcher =pattern.matcher(content);while(matcher.find()){System.out.println(matcher.group(0));// System.out.println(matcher.group(1));//错误,并不会捕获分组}Stringres =matcher.replaceAll("@@@@@");System.out.println(res);// Windows// @@@@@2000 Windows3.1

    非捕获匹配 (?!pattern)
    该表达式匹配不处于匹配pattern的字符串的起始点的搜索字符串。字符串边界

  • 7.3、概述
  • 2.2、特殊字符元字符
    元字符说明
    [\b]退格字符
    \c匹配一个控制字符
    \d匹配任意数字字符
    \D\d的反义
    \f换页符
    \n换行符
    \r回车符
    \s匹配一个空白字符
    \t制表符(Tab字符)
    \v垂直制表符
    \w匹配任意字母数字字符或下划线字符
    \W\w的反义
    \x匹配一个十六进制数字
    \0匹配一个八进制数字

    1.5、匹配特殊字符

  • 4、对前后查找取非

    前后查找还有一种不太常见的用法叫作负前后查找(negative lookaround)。注意,被匹配到的并没有出现在最终的匹配结果里;我们用?=向正则表达式引擎表明:只要找到就行了,不要把它包括在最终的匹配结果里,用术语来说,就是“不消费”它。单词边界

    使用\b来匹配一个单词的开始或结尾:
    在这里插入图片描述

    使用\B表明不匹配一个单词边界:
    在这里插入图片描述

    7.2、匹配多个字符中的某一个

  • 4.2、利用字符集合区间
  • 4.3、负向前查找(negative lookahead)将向前查找不与给定模式相匹配的文本,负向后查找(negative lookbehind)将向后查找不与给定模式相匹配的文本。

    在这里插入图片描述
    在上面列出的URL地址里,协议名与主机名之间以一个分隔。位置元字符

    元字符说明
    ^匹配字符串的开头
    \A匹配字符串的开头
    $匹配字符串的结束
    \Z匹配字符串的结束
    \<匹配单词的开头
    \>匹配单词的结束
    \b匹配单词边界(开头和结束)
    \B\b的反义

    1.4、\u\U进行字母大小写转换

  • 不支持使用\b匹配退格符
  • 不支持\z
  • 2.2、匹配纯文本
  • 3.2、匹配任意字符
  • 3.3、子表达式的嵌套
  • 9、位置匹配
  • 7.1、匹配特殊字符

    使用\转义字符:

    在这里插入图片描述

    4、
  • a-z,匹配从a到z的所有小写字母。例如,'Windows(?=95|98|NT|2000)'匹配"Windows 2000"中的"Windows",但是不匹配"Windows 3.1"中的"Windows"。前后查找
    • 10.1、重复匹配
  • 6.1、正则表达式语法
    • 1.1、大小写转换
  • 元字符说明
    \E结束\L或\U转换
    \l把下一个字符转换位小写
    \L把后面的字符转换位小写,直到遇见\E为止
    \u把下一个字符转换位大写
    \U把后面的字符转换位大写,直到遇到\E为止

    把一级标题中的文本转换为大写:
    在这里插入图片描述

    替换:

    $1\U$2\E$3

    结果:

    <BODY><H1>WELCOME TO MY HOMEPAGE</H1><H2>Coldfusion</H2><H2>Wireless</H2><H2>This is not valid HTML</H3></BODY>

    注意:Java并不支持此种大小写转换!

    10、匹配多个字符中的某一个

    在这里插入图片描述

    4.2、从语法上看,一个向前查找模式其实就是一个以?=开头的子表达式,需要匹配的文本跟在=的后面。大小写转换
  • 1.7、

    Java语言中的正则表达式匹配功能主要是通过java.util.regex.Matcherjava.util.regex.Pattern类实现的。匹配单个字符

    • 3.1、向后查找
  • 正如你刚看到的那样,?=将向前查找(查找出现在被匹配文本之后的字符,但不消费那个字符)。数量元字符

    元字符说明
    *匹配前一个字符(子表达式)的零次或多次重复(默认贪婪匹配)
    *?*的懒惰匹配版本
    +匹配前一个字符(子表达式)的一次或多次重复(默认贪婪匹配)
    +?+的懒惰匹配版本
    ?匹配前一个字符(子表达式)的零次或一次重复
    {n}匹配前一个字符(子表达式)的n次重复
    {m, n}匹配前一个字符(子表达式)至少m次且至多n次重复
    {n,}匹配前一个字符(子表达式)n次或更多次重复
    {n,}?{n,}的懒惰匹配版本

    1.3、防止过度匹配
  • 7、

    Stringstr ="ABC01: $23.45\n"+"HGG42: $5.31\n"+"CFMX1: $899.00\n"+"XTC99: $68.96\n"+"Total items found: 4";Stringpattern ="(?<=\\$)[0-9.]+";Patternr =Pattern.compile(pattern);Matcherm =r.matcher(str);while(m.find()){System.out.println(m.group());}// 23.45// 5.31// 899.00// 68.96

    (?<=\$)只匹配$,但不消费它;最终的匹配结果里只有价格数字,没有前缀$字符。大小写转换

  • 10、匹配一组字符
  • 4.1、有多少个匹配

    使用+,匹配一个或多个字符:
    在这里插入图片描述

    使用*,匹配零个或多个字符:
    在这里插入图片描述

    使用?,匹配零个或一个字符:
    在这里插入图片描述

    6.2、前后查找

    10.1、子表达式

    子表达式是一个更大的表达式的一部分;把一个表达式划分为一系列子表达式的目的是为了把那些子表达式当作一个独立元素来使用。除了向前查找,许多正则表达式实现还支持向后查找,也就是查找出现在被匹配文本之前的字符(但不消费它),向后查找操作符是?<=。位置匹配

    • 7.1、分行匹配模式

      使用(?m)启用分行匹配模式:
      在这里插入图片描述

      Stringstr ="aaa\n"+"aba\n"+"aca\n"+"bab\n"+"cac";Stringpattern ="(?m)^a.*a$";Patternr =Pattern.compile(pattern);Matcherm =r.matcher(str);while(m.find()){System.out.println(m.group());}

      8、

      Stringcontent ="hello韩顺平教育 jack韩顺平老师 韩顺平同学hello";StringregStr ="韩顺平(?:教育|老师|同学)";Patternpattern =Pattern.compile(regStr);Matchermatcher =pattern.matcher(content);while(matcher.find()){System.out.println(matcher.group(0));// System.out.println(matcher.group(1));//错误,并不会捕获分组}// 韩顺平教育// 韩顺平老师// 韩顺平同学

      非捕获匹配 (?=pattern)
      它是一个非捕获匹配。回溯引用匹配

      使用\n来引用模式里的子表达式(\1表示第一个子表达式,\2表示第二个子表达式;依次类推):

      在这里插入图片描述

      Stringstr ="This is a block of of text,\n"+"several words here are are\n"+"repeated, and and they\n"+"should not be.";Stringpattern ="[ ]+(\\w+)[ ]\\1";Patternr =Pattern.compile(pattern);Matcherm =r.matcher(str);while(m.find()){System.out.println(m.group());}

      9.2、\L、大小写转换

      元字符说明
      \E结束\L或\U转换
      \l把下一个字符转换位小写
      \L把后面的字符转换位小写,直到遇见\E为止
      \u把下一个字符转换位大写
      \U把后面的字符转换位大写,直到遇到\E为止

      1.7、

      目录

      • Java正则表达式
        • 1、正则表达式语法

      1.1、回溯引用和前后查找

    • 1.6、回溯引用可以跨模式使用,在第一个模式里被匹配的子表达式可以用在第二个模式里。例如,'industr(?:y|ies)'是比’industry|industries’更经济的表达式。向前查找
    • 10.2、匹配任意字符

      使用.匹配任意字符:

      在这里插入图片描述

      3.3、利用字符集合区间

      字符区间并不仅限于数字,以下这些都是合法的字符区间:

      • A-Z,匹配从A到Z的所有大写字母。匹配单个字符

        3.1、

        Stringstr ="http://www.forta.com/\n"+"https://mail.forta.com/\n"+"ftp://ftp.forta.com/";Stringpattern =".+(?=:)";Patternr =Pattern.compile(pattern);Matcherm =r.matcher(str);while(m.find()){System.out.println(m.group());}

        10.2、特殊字符元字符

      • 1.5、这对于用"or"字符(|)组合模式部件的情况很有用。因此,?=被称为向前查找操作符。

        Stringcontent ="hanshunping s7789 nn1189han";StringregStr ="(?<g1>\\d\\d)(?<g2>\\d\\d)";Patternpattern =Pattern.compile(regStr);Matchermatcher =pattern.matcher(content);while(matcher.find()){System.out.println(matcher.group(0));System.out.println(matcher.group("g1"));System.out.println(matcher.group("g2"));}// 7789// 77// 89// 1189// 11// 89

        非捕获匹配 (?:pattern)
        匹配pattern但不捕获该匹配的子表达式,即它是一个非捕获匹配,不存储以后使用的匹配。\l、使用元字符

        • 5.1、防止过度匹配
          贪婪型元字符懒惰型元字符
          **?
          ++?
          {n,}{n,}?

          贪婪匹配的结果,将第一个B标签的开头和第二个B标签的结尾匹配为一对:
          在这里插入图片描述

          懒惰匹配的结果:
          在这里插入图片描述

          Stringstr ="This offer is not available to customers living in <B>AK</B> and <B>HI</B>.";//贪婪匹配Stringpattern ="<[Bb]>.*</[Bb]>";Patternr =Pattern.compile(pattern);Matcherm =r.matcher(str);while(m.find()){System.out.println(m.group());}//懒惰匹配pattern ="<[Bb]>.*?</[Bb]>";r =Pattern.compile(pattern);m =r.matcher(str);while(m.find()){System.out.println(m.group());}

          7、例如:(?'name')。位置元字符

        • 1.4、获取匹配位置
        • 2.3、回溯引用和前后查找
          元字符说明
          ()定义一个子表达式
          \1匹配第1个子表达式:\2表示第2个子表达式,以此类推
          ?=向前查找
          ?<=向后查找
          ?!负向前查找
          ?<!负向后查找
          ?()条件(if then)
          ?()|条件(if then else)

          1.6、使用子表达式

          8.1、使用子表达式

          • 8.1、向前查找和向后查找结合起来
            Stringstr ="<HEAD>\n"+"<TITLE>Ben Forta's Homepage</TITLE>\n"+"</HEAD>";Stringpattern ="(?<=<[tT][iI][tT][lL][eE]>).*(?=</[tT][iI][tT][lL][eE]>)";Patternr =Pattern.compile(pattern);Matcherm =r.matcher(str);while(m.find()){System.out.println(m.group());//Ben Forta's Homepage}

            10.4、字符串边界

            使用^匹配字符串的开头,$匹配字符串的结尾:

            在这里插入图片描述

            7.3、匹配的重复次数

            使用{n},位重复匹配次数设定一个精确的值:
            在这里插入图片描述

            使用{m, n},位重复匹配次数设定一个区间:
            在这里插入图片描述

            使用{m,},匹配"至少重复多少次":
            在这里插入图片描述

            6.3、匹配特定的字符类别

            元字符说明
            \d任何一个数字字符(等价于[0-9]
            \D任何一个非数字字符(等价于[^0-9]

            在这里插入图片描述
            在这里插入图片描述

            元字符说明
            \w任何一个字母数字字符(大小写均可)或下划线字符(等价于[a-zA-Z0-9_]
            \W任何一个非字母数字或非下划线字符(等价于[^a-zA-Z0-9_]

            在这里插入图片描述

            元字符说明
            \s任何一个空白字符(等价于[\f\n\r\t\v]
            \S任何一个非空白字符(等价于[^\f\n\r\t\v]

            在这里插入图片描述

            匹配十六进制(\x前缀)或八进制数值(\0前缀):

            在这里插入图片描述
            \x0A对应于ASCII字符10(换行符),其效果等价于\n。向前查找和向后查找结合起来

          • 10.4、子表达式
          • 8.2、取非匹配

            集合中使用^
            在这里插入图片描述

            5、对前后查找取非