• 【Java】正则表达式


    有关Java中的正则表达式的细则可以查阅JDK中的 java.util.regex 包中的 Pattern 类

            一个正则表达式是含有一些具有特殊意义字符的字符串,这些特殊字符称作正则表达式中的元字符

            例如:“ \\dcat ” 中的 \\d 就是有特殊意义的元字符,代表从 0 ~ 9 的任意一个数,“ \\dcat ” 能够匹配 0cat、1cat、2cat…9cat 字符串。

    以下是常用的元字符及其意义:

    元字符在正则表达式中的写法意义
    ..代表任意一个字符
    \d\d代表 0 ~ 9 任意一个数字
    \D\D代表任何一个非数字字符
    \s\s代表空格类字符,如 “ \t ” " \n " " \x0B " " \f " " "\r "
    \S\S代表非空格类字符
    \w\w代表可用于标识符的字符
    \W\W代表不能用于标识符的字符
    \p{Lower}\p{Lower}小写字母 [ a - z ]
    \p{Upper}\p{Upper}大写字母 [ A - Z ]
    \p{ASCII}\p{ASCII}ASCII 字符
    \p{Alpha}\p{Alpha}字母
    \p{Digit}\p{Digit}数字字符
    \p{Alnum}\p{Alnum}字母或数字
    \p{Punct}\p{Punct}标点符号: !"#$%&*±,./:;<=>?@[]^_{}|~
    \p{Graph}\p{Graph}可视字符:相当于\p{Alnum}\p{Punct}
    \p{Print}\p{Print}可打印字符:相当于\p{Graph}
    \p{Blank}\p{Blank}空格或制表符 [ \t ]
    \p{Cntrl}\p{Cntrl}控制字符:[ \x00-\xlF\x7F ]
    • 在正则表达式中:用方括号扩起若干个字符来表示一个元字符;
    • 该元字符代表方括号中的任何一个字符;
      • 例如:
      • regex=“[168]ABC”;
      • 代表着 “1ABC”、“6ABC”、“8ABC”

    方括号元字符的意义如下:

    [abc]:代表a、b、c中的任何一个
    
    • 1
    [^abc]:代表除了a、b、c以外的任何字符
    
    • 1
    [a-d]:代表a至d中的任何一个
    
    • 1
    [a-zA-Z]:代表英文字母中的任何一个
    
    • 1

    另外,中括号里还允许嵌套中括号,可以进行并、交、差运算:

    [a-d[m-p]]:代表a至d,或m至p中的任何一个字符(并)
    
    • 1
    [a-z&&[def]]:代表d、e、f中的任何一个(交)
    
    • 1
    [a-f&&[^bc]]:代表a、d、e、f(差)
    
    • 1

    在正则表达式中,用 “ . ” 来表示任何一个字符:

    如果想使用普通意义的点字符,必须使用[.]或\56表示
    
    • 1
    • 限定修饰符:

    对于限定修饰符?,如果X代表正则表达式中的一个元字符或普通字符,则X?表示X出现0次或1次

    例如

    regex = "hello[2468]?";
    
    表示:(出现0次或1次)
    
    hello 、hello2 、hello4 、hello6 、hello8
    
    • 1
    • 2
    • 3
    • 4
    • 5
    带限定符号的模式意义
    X?X出现0次或1次
    X*X出现0次或多次
    X+X出现1次或多次
    X{n}X恰好出现n次
    X{n,}X至少出现n次
    X{n,m}X出现n次到m次
    XYX后跟Y
    X|YX或Y

    例如:

    regex = "\\w{4}";
    
    表示:
    
    abcd 天道酬勤 Java bird
    
    • 1
    • 2
    • 3
    • 4
    • 5

    下面举几个例子来深入理解:

    • 判断用户从键盘输入的字符序列是否全部由英文字母所组成
    import java.util.Scanner;
    public class Example {
        public static void main(String args[]) {
            String regex = "[a-zA-Z]+"; //也可 [a-z-A-Z]
            Scanner sc = new Scanner(System.in);
            String str = sc.nextLine();
            if(str.matches(regex)){
                System.out.println(str+"中的字符都是英文字符");
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 字符串的替换

    字符串调用方法:

    public String replaceAll( String regex,String replacement )
    
    • 1

    方法返回一个字符串,该字符串是当前字符串中所有和参数 regex 指定的正则表达式匹配的子字符串被参数替换 replacement 指定的字符串替换后的字符串;

    例如:

    String result = "123hello456".replaceAll( "[a-zA-Z]+","你好" );
    
    输出:
    
    "123你好567"
    
    • 1
    • 2
    • 3
    • 4
    • 5

    replaceAll方法是返回一个字符串,而不改变当前字符串


    • 字符串的分解

    String类提供:

    public String[] split( String regex );
    
    • 1

    字符串调用该方法时,使用参数指定的正则表达式 regex 作为分割标记,分解出其中的单词,并将分解出的单词存放在字符串数组中;

    例如:

      String str = "Who are you ?";
     //空格、数字和符号组成的正则表达式
      String regex = "[\\s\\d\\p{Punct}]+";
      String words[] = str.split(regex);
     
      for (String s:words) {
          System.out.println("word:"+s);
      }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    运行结果:
    在这里插入图片描述

  • 相关阅读:
    【C++】LeetCode 160 相交链表
    重磅!法大大上榜“专精特新”企业
    【软件工程】简单讲讲设计模式七大原则,以及代码简单举例
    python datetime 返回一个时间段内的所有日期列表
    Java【抽象类和接口】是什么?
    构造pop链
    多线程-进阶
    一文弄懂Vue与Servlet的交互:让你的大学课设变得容易起来
    OpenVPN安装部署详解
    传统伪影去除方案
  • 原文地址:https://blog.csdn.net/Lov1_BYS/article/details/127697177