0%

EP19-正则表达式基础知识点

正则表达式是用于匹配、查找和操作文本的强大工具,通过定义特定模式来描述文本规则。

一、基础语法

(一)字符匹配

  1. 普通字符:直接匹配对应字符本身。例如,正则表达式 abc 能匹配字符串 “abc”,因为它精确匹配了这三个连续的字符。

  2. 元字符:具有特殊含义的字符。例如,. 匹配除换行符 \n 之外的任意单个字符。正则表达式 a.c 可以匹配 “abc”、“a1c”、“a c” 等,只要中间字符是单个任意字符(除 \n 外)。

(二)字符类

  1. **方括号 []**:定义一个字符集合,匹配其中任意一个字符。例如,[abc] 可以匹配 “a”、“b” 或 “c”。还能使用范围表示,如 [a - z] 匹配任意小写字母,[0 - 9] 匹配任意数字。
  2. **否定字符类 [^]**:匹配不在方括号内的任意一个字符。例如,[^abc] 可以匹配除 “a”、“b”、“c” 之外的任何字符。

(三)数量限定符

  1. **\***:匹配前面的元素零次或多次。例如,a* 可以匹配空字符串,也可以匹配 “a”、“aa”、“aaa” 等任意多个 “a” 组成的字符串。
  2. **+**:匹配前面的元素一次或多次。例如,a+ 至少匹配一个 “a”,能匹配 “a”、“aa”、“aaa” 等,但不能匹配空字符串。
  3. **?**:匹配前面的元素零次或一次。例如,a? 可以匹配空字符串或 “a”。
  4. **{n}**:匹配前面的元素恰好 n 次。例如,a{3} 只能匹配 “aaa”。
  5. **{n,}**:匹配前面的元素至少 n 次。例如,a{3,} 能匹配 “aaa”、“aaaa”、“aaaaa” 等。
  6. **{n,m}**:匹配前面的元素至少 n 次,最多 m 次。例如,a{2,4} 可以匹配 “aa”、“aaa”、“aaaa”。

二、边界匹配

  1. **^**:匹配字符串的开头。例如,^abc 只会匹配以 “abc” 开头的字符串,如 “abcdef”,而不会匹配 “defabc”。
  2. **$**:匹配字符串的结尾。例如,abc$ 只会匹配以 “abc” 结尾的字符串,如 “defabc”,而不会匹配 “abcdef”。
  3. **\b**:匹配单词边界,即单词和非单词字符的分界处。例如,\bcat\b 可以匹配 “the cat is here” 中的 “cat”,但不会匹配 “category” 中的 “cat”。

三、分组与捕获

  1. **分组 ()**:将多个字符作为一个整体进行操作。例如,(ab)+ 表示 “ab” 整体出现一次或多次,可以匹配 “ab”、“abab”、“ababab” 等。
  2. 捕获组:括号内的表达式会被捕获,可以在后续通过索引(从 1 开始)来引用。例如,对于正则表达式 (a)(b),在匹配 “ab” 后,group(1) 会返回 “a”,group(2) 会返回 “b”。

四、示例分析

假设要从字符串 “USD:352677,33.00” 中提取出 “USD” 和 “352677,33.00” 两部分,使用正则表达式 ([A-Z]{3}):(\\d{1,3}(,\\d{3})*\\.\\d{2})

  1. **([A-Z]{3})**:这是第一个捕获组,[A-Z] 表示所有大写字母的字符类,{3} 限定前面的字符类要出现 3 次,所以它会匹配到 “USD” 这样的三位大写字母组合,通过 group(1) 可获取 “USD”。
  2. **:**:匹配字符串中的冒号。
  3. **(\\d{1,3}(,\\d{3})\*\\.\\d{2})**:这是第二个捕获组,\\d{1,3} 匹配金额整数部分开头的 1 到 3 位数字,(,\\d{3})* 匹配可能存在的千分位分隔符及后续 3 位数字,* 表示可以有零个或多个这样的组合,\\.\\d{2} 匹配小数点及后面两位数字。整体匹配 “352677,33.00” 这样格式的金额,通过 group(2) 可获取该金额字符串。
--------------------------------------- The End ---------------------------------------