正则表达式学习

Catalogue
  1. 1. 正则示例
  2. 2. java中的正则
  3. 3. 正则表达式-匹配字符(集合)
  4. 4. 量词
  5. 5. 字符边界
  6. 6. 选择符和分组
  7. 7. 反向引用
正则示例
正则表达式 描述
this is text 匹配字符串 “this is text”
this\s+is\s+text 注意字符串中的 \s+。匹配单词 “this” 后面的 \s+ 可以匹配多个空格,之后匹配 is 字符串,再之后 \s+ 匹配多个空格然后再跟上 text 字符串。可以匹配这个实例:this is text
^\d+(.\d+)? ^ 定义了以什么开始; \d+ 匹配一个或多个数字; ? 设置括号内的选项是可选的; . 匹配 “.”; 可以匹配的实例:”5”, “1.5” 和 “2.21”。
java中的正则

java.util.regex 包主要包括以下三个类:

  • Pattern 类:
    Pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。

  • Matcher 类:
    Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。

    • matches() 尝试将整个字符串序列与该模式匹配
    • find() 该方法扫码输入的序列, 查找与该模式匹配的下一个子序列
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      Pattern PATTERN = Pattern.compile("\\d+ \\w+");
      Matcher matcher = PATTERN.matcher("1 apple");
      boolean find = matcher.find();
      System.out.println("find:" + find);
      boolean find1 = matcher.find();
      System.out.println("find1:" + find1);

      // output
      find:true
      find1:false
    • group() 捕获组取值, 一般与find() 一起用
    • group(num) 捕获组取值, 一般与matches() 一起用
  • PatternSyntaxException:
    PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。

一般是两种用途:

  1. 判断字符串中是否包含某个子串;
  2. 提取某个字符串中符合正则规则的内容

注: 正则中的 \ 在Java中需要使用 \\

正则表达式-匹配字符(集合)
  • 匹配普通字符:
    字母、数字、汉字、下划线, 以及没有特殊定义的标点符号

  • 匹配转义字符

    字符 说明
    \n 代表换行符
    \t 制表符
    \、^、$、(、)、{、}、?、+、*、\、|、[、] 代表字符本身(就是在正则表达式中有特殊作用的字符需要做转义处理)
  • 标准字符集合

    字符 说明
    \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] 等效
    . 匹配除”\r\n”之外的任何单个字符。若要匹配包括”\r\n”在内的任意字符,请使用诸如”[\s\S]”之类的模式
  • 自定义字符集合
    [] 方括号匹配方式, 能够匹配方括号中的任意一个字符。

    字符集合 说明
    [ab5@] 匹配 a 或 b 或 5 或 @
    [^abc] 匹配 a、 b、 c之外的任意一个字符
    [a-z] 匹配 a~z 之间的任意一个字符
    [^A-F0-3] 匹配 AF, 03 之外的任意一个字符

注意:

  1. 正则表达式的特殊符号, 被包含到中括号中, 则失去特殊意义, 除了 ^ 和 - 之外
  2. 标准字符集合, 除小数点外, 如果被包含于中括号中, 自定义字符集合将包含该集合, 比如: [\d.-+] 将匹配: 数字 或 小数点 或 + 或 -
量词
  • 修饰匹配次数的特殊符号。
字符 说明
{n} n 是非负整数。正好匹配 n 次。例如,”o{2}”与”Bob”中的”o”不匹配,但与”food”中的两个”o”匹配。
{n,} n 是非负整数。至少匹配 n 次。例如,”o{2,}”不匹配”Bob”中的”o”,而匹配”foooood”中的所有 o。”o{1,}”等效于”o+”。”o{0,}”等效于”o*”。
{n,m} m 和 n 是非负整数,其中 n <= m。匹配至少 n 次,至多 m 次。例如,”o{1,3}”匹配”fooooood”中的头三个 o。’o{0,1}’ 等效于 ‘o?’。注意:您不能将空格插入逗号和数字之间。
? 匹配表达式0次或1次, 相当于 {0,1}
+ 表达式至少出现一次, 相当于 {1,}
* 表达式不出现或者出现任意次, 相当于{0,}

注:

  • {0,1} 中逗号左边必须有, 不能有 {,6} 这种形式
  • 匹配规则默认为贪婪模式, 即匹配字符越多越好
  • 匹配次数中的非贪婪模式(匹配字符越少越好, 修饰匹配次数的特殊符合后再加一个 ?)
字符边界
  • 匹配符合某种条件的位置
    字符 说明
    ^ 字符串开始的地方进行匹配([]外)
    $ 字符串结束的地方进行匹配
    \b 匹配一个单次边界,即前面或后面的字符至少有一个是[A-Za-z0-9_]以外的字符
    ^A 多行模式下, 匹配第一个出现的字符
    ^Z 多行模式下, 匹配最后一个出现的字符
选择符和分组
字符 作用
|
() 匹配 pattern 并捕获该匹配的子表达式。可以使用 $0$9 属性从结果”匹配”集合中检索捕获的匹配。若要匹配括号字符 ( ),请使用”(“或者”)“
反向引用
  • 每一对 ()会分配一个编号, 使用 () 的捕获根据左括号的顺序从1开始自动编号
  • 通过反向引用, 可以对已捕获的字符串进行引用