参考资料

限定符 Quantifiers

限定一个字符

{} 中写上数字表示匹配到前面字符的准确位数 举例:ab{5}c 可以匹配 abbbbbc 也可以写入一个范围如 ab{3,5}c 可以匹配 abbbc, abbbbc, abbbbbc 如果省略表示范围上限的数字,可以匹配下限以上数字的项目

? 代表前一位字符出现 0 次或 1 次(可有可无),相当于 {0,1} 举例:used? 可以匹配 use 和 used

* 匹配 0 个或多个前一位字符,相当于 {0,} 举例:ab*c 可以匹配 ac,abc,abbbbbc

+ 匹配出现一次以上的字符,相当于 {1,} 举例:ab+c 可以匹配 abc,abbbbbc

匹配多个字符

() 将需要查找的多个字符组合在一起再添加限定符

或运算 OR Operator

| 举例:a (cat|dog)(注意有空格)可以匹配 a cat 和 a dog

字符类 Character Classes

[abc] 等价于 (a|b|c) 方括号中可以指定字符的范围 举例: [a-z] 代表所有小写英文字母 [a-zA-Z] 代表所有英文字母 [a-zA-Z0-9] 代表所有英文字母和数字 如果在方括号里最前面加上^符号,如 [^0-9] 代表所有非数字字符

元字符 Meta-characters

  • \d 数字字符
  • \D 非数字字符
  • \w 单词字符
  • \W 非单词字符
  • \s 空白符(包含 Tab 和换行符)
  • \S 非空白符
  • . 表示除换行符外的任意字符
  • ^ 写在要匹配的字符前,匹配行首,$ 写在要匹配的字符后,匹配行尾

贪婪匹配 Greedy Match 与懒惰匹配 Lazy Match

<.+?> 可以匹配单个 html 标签,避免从第一个标签开头匹配到最后一个标签末尾

实例

  1. 十六进制颜色值匹配 #[a-fA-F0-9]{6}\b\b 代表单词字符的边界
  2. IPv4 地址匹配 \d+\.\d+\.\d+\.\d+ 句点前的 \ 为转义符,改良 \b((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)\b

待学习:

  • 捕获 Capturing
  • 断言 Lookbehind Assertions
  • 递归 Recursion
  • 平衡组 Balancing Groups