VVLL.net

正则表达式手册(Regex)

日期:2024-08-22 09:58:31

正则表达式手册(Regex)

正则表达式(Regular Expressions,简称 Regex)是一种用于匹配字符串的模式。它在文本处理、数据验证和提取等方面非常强大和灵活。以下是详细的 Regex 语法手册,并附有示例说明。

基本字符匹配

  • 字符:直接匹配字符本身。例如:
    • a 匹配字符串 "a"。
    • abc 匹配字符串 "abc"。

元字符

  • .:匹配除换行符以外的任意单个字符。
    • a.b 匹配 "aab", "acb" 等。
  • \:转义字符,用于转义元字符,使其失去特殊意义。
    • a\.b 匹配 "a.b"。

字符类

  • []:匹配方括号内的任意一个字符。
    • [abc] 匹配 "a", "b", "c" 中的任意一个。
  • [^]:匹配不在方括号内的任意一个字符。
    • [^abc] 匹配除 "a", "b", "c" 以外的任意一个字符。
  • 范围:在方括号内使用 - 指定字符范围。
    • [a-z] 匹配小写字母。
    • [0-9] 匹配数字。

预定义字符类

  • \d:匹配任何数字,相当于 [0-9]
    • \d{3} 匹配任何三位数字,如 "123"。
  • \D:匹配任何非数字字符,相当于 [^0-9]
    • \D 匹配 "a", "-" 等非数字字符。
  • \w:匹配任何字母、数字或下划线,相当于 [a-zA-Z0-9_]
    • \w+ 匹配一个或多个字母、数字或下划线。
  • \W:匹配任何非字母、数字或下划线字符,相当于 [^a-zA-Z0-9_]
    • \W 匹配 "!", "@" 等特殊字符。
  • \s:匹配任何空白字符(包括空格、制表符、换行符等)。
    • \s 匹配 " ", "\t" 等。
  • \S:匹配任何非空白字符,相当于 [^ \t\n\r\f\v]
    • \S 匹配 "a", "1" 等非空白字符。

数量词

  • *:匹配前面的字符零次或多次。
    • a* 匹配 "", "a", "aa" 等。
  • +:匹配前面的字符一次或多次。
    • a+ 匹配 "a", "aa" 等。
  • ?:匹配前面的字符零次或一次。
    • a? 匹配 "", "a"。
  • {n}:匹配前面的字符恰好 n 次。
    • a{3} 匹配 "aaa"。
  • {n,}:匹配前面的字符至少 n 次。
    • a{2,} 匹配 "aa", "aaa" 等。
  • {n,m}:匹配前面的字符至少 n 次,但不超过 m 次。
    • a{2,4} 匹配 "aa", "aaa", "aaaa"。

边界匹配

  • ^:匹配字符串的开始。
    • ^abc 匹配以 "abc" 开头的字符串。
  • $:匹配字符串的结束。
    • abc$ 匹配以 "abc" 结尾的字符串。
  • \b:匹配单词边界。
    • \bword\b 匹配单词 "word"。
  • \B:匹配非单词边界。
    • \Bword\B 匹配 "password" 中的 "word"。

分组和引用

  • ():分组,用于提取子字符串或应用数量词。
    • (abc)+ 匹配 "abc", "abcabc"。
  • \1, \2, ...:反向引用,用于匹配之前的捕获组。
    • (a)(b)\1\2 匹配 "abab"。

或匹配

  • |:匹配左边或右边的字符。
    • a|b 匹配 "a" 或 "b"。

零宽断言

  • (?=...):正向前瞻断言,要求接下来的字符与 ... 匹配,但不消耗这些字符。
    • a(?=b) 匹配 "a" 仅当其后跟着 "b"。
  • (?!...):负向前瞻断言,要求接下来的字符不与 ... 匹配。
    • a(?!b) 匹配 "a" 仅当其后不跟着 "b"。
  • (?<=...):正向后瞻断言,要求前面的字符与 ... 匹配,但不消耗这些字符。
    • (?<=a)b 匹配 "b" 仅当其前面是 "a"。
  • (?<!...):负向后瞻断言,要求前面的字符不与 ... 匹配。
    • (?<!a)b 匹配 "b" 仅当其前面不是 "a"。

贪婪与懒惰匹配

  • 贪婪匹配:尽可能多地匹配字符,默认行为。
    • a.*b 匹配 "a" 开头和 "b" 结尾的最长字符串。
  • 懒惰匹配:尽可能少地匹配字符,在量词后加 ? 实现。
    • a.*?b 匹配 "a" 开头和 "b" 结尾的最短字符串。

示例汇总

  • 匹配邮箱地址
    • ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
    • 解释:匹配类似 "example@example.com" 的邮箱地址。
  • 匹配电话号码
    • ^\d{3}-\d{3}-\d{4}$
    • 解释:匹配类似 "123-456-7890" 的电话号码。
  • 匹配日期(YYYY-MM-DD)
    • ^\d{4}-\d{2}-\d{2}$
    • 解释:匹配类似 "2024-06-17" 的日期格式。