正则表达式中特殊字符的含义

3 阅读2分钟

正则表达式中的特殊字符(元字符)各自有特定含义。以下是常用特殊字符及其作用:

1. 定位符

字符含义示例
^匹配字符串开头^abc 匹配以 "abc" 开头的字符串
$匹配字符串结尾abc$ 匹配以 "abc" 结尾的字符串
\b单词边界\bword\b 匹配整个单词 "word"
\B非单词边界\Bword\B 匹配 "sword" 中的 "word"

2. 量词

字符含义示例
*0 次或多次a* 匹配 "", "a", "aa", "aaa"...
+1 次或多次a+ 匹配 "a", "aa", "aaa"... 不匹配 ""
?0 次或 1 次a? 匹配 "" 或 "a"
{n}恰好 n 次a{3} 匹配 "aaa"
{n,}至少 n 次a{2,} 匹配 "aa", "aaa"...
{n,m}n 到 m 次a{2,4} 匹配 "aa", "aaa", "aaaa"

3. 字符类

字符含义示例
.匹配除换行符外的任意字符a.c 匹配 "abc", "a c", "a1c"
\d数字 [0-9]\d{3} 匹配三位数字
\D非数字 [^0-9]\D+ 匹配非数字字符
\w单词字符 [a-zA-Z0-9_]\w+ 匹配单词
\W非单词字符\W 匹配空格、标点等
\s空白字符(空格、制表符等)\s+ 匹配多个空白
\S非空白字符\S+ 匹配非空白字符
[abc]a、b 或 c 中的任意一个[aeiou] 匹配任意元音字母
[^abc]除 a、b、c 以外的任意字符[^0-9] 匹配非数字
[a-z]a 到 z 的范围[A-Z] 匹配大写字母
[0-9]0 到 9 的范围[0-9] 匹配数字

4. 分组与选择

字符含义示例
|或(选择)a|b 匹配 "a" 或 "b"
(...)捕获分组(ab)+ 匹配 "ab", "abab"...
(?:...)非捕获分组(?:ab)+ 分组但不捕获
(?=...)正向先行断言\d(?=px) 匹配后面跟着 "px" 的数字
(?!...)负向先行断言\d(?!px) 匹配后面不跟 "px" 的数字

5. 转义

字符含义示例
\\转义特殊字符\\. 匹配字面点号 .
\n换行符
\r回车符
\t制表符

常见示例

// 1. 匹配邮箱(简单版)
String regex = "^[\\w.-]+@[\\w.-]+\\.\\w+$";

// 2. 匹配手机号(11位数字)
String regex = "^1[3-9]\\d{9}$";

// 3. 匹配 IP 地址(简化版)
String regex = "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}";

// 4. 提取 HTML 标签内的内容
String regex = "<([^>]+)>([^<]*)</\\1>";

// 5. 匹配中文字符
String regex = "[\\u4e00-\\u9fa5]+";

优先级(从高到低)

  1. 转义符 \
  2. 括号 () []
  3. 量词 * + ? {}
  4. 连接(相邻字符)
  5. 选择 |

在 Java 中的注意事项

// Java 字符串中需要双重转义
String regex = "\\d+\\.\\d+";  // 匹配 "123.456"

// 等价于正则表达式
// \d+\.\d+

记忆技巧:如果要用字面意义的特殊字符(如 .*+?|()[]{}^$\),都需要用 \\ 转义。