【通用知识】正则表达式


基础字符匹配

语法说明示例
abc匹配连续字符 “abc”abc → “abc”
[abc]匹配 a、b 或 c 中的任意字符[ae] → “a”(在 “apple” 中)
[^abc]匹配 a、b、c 的字符[^ap] → “l”(在 “apple” 中)
[a-z]匹配任意小写字母[a-c] → “a”、“b”、“c”
.匹配任意单个字符(换行符除外)a.c → “abc”、“aac”

预定义字符类

语法说明等价写法
\d数字(0-9)[0-9]
\D数字[^0-9]
\w单词字符(字母、数字、下划线)[a-zA-Z0-9_]
\W单词字符[^\w]
\s空白字符(空格、制表符、换行符)[ \t\n\r]
\S空白字符[^\s]

边界匹配

语法说明示例
^字符串开始^abc → “abc”(需在开头)
$字符串结束end$ → “end”(需在结尾)
\b单词边界\bcat\b → “cat”(不匹配 “catalog”)
\B单词边界\Bcat\B → “cat”(在 “scatter” 中)

重复匹配

语法说明示例
*匹配 0 次或多次a* → “”、“a”、“aa”
+匹配 1 次或多次a+ → “a”、“aa”(不匹配空)
?匹配 0 次或 1 次a? → “”、“a”
{n}匹配 n 次a{3} → “aaa”
{n,}匹配 至少 n 次a{2,} → “aa”、“aaa”
{n,m}匹配 n 到 m 次a{2,4} → “aa”、“aaa”

贪婪模式(默认):尽可能多匹配(a.*b 在 “axbxb” 中匹配整个字符串)。
非贪婪模式:加 ? 尽可能少匹配(a.*?b → “axb”)。


分组与捕获

语法说明示例
(exp)捕获分组,后续可引用(abc)+ → “abcabc”
(?:exp)非捕获分组(不存储)`(?:abc)
\n引用第 n 个分组(a)\1 → “aa”(匹配连续两个相同字符)
(?<name>exp)命名分组(通过名称引用)(?<num>\d+) → 捕获数字并命名为 “num”

注:在真实大数据场景中,非捕获分组通常更快更可靠。


选择与断言

语法说明示例
``逻辑
(?=exp)正向先行断言(后面是 exp)a(?=b) → “a”(仅当后跟 “b” 时)
(?!exp)负向先行断言(后面不是 exp)a(?!b) → “a”(当后跟非 “b” 时)
(?<=exp)正向后行断言(前面是 exp)(?<=a)b → “b”(仅当前有 “a” 时)
(?<!exp)负向后行断言(前面不是 exp)(?<!a)b → “b”(当前不是 “a” 时)

转义与特殊字符

  • 元字符需转义:\.\*\(\)\[\\ 等。

  • 特殊序列:

    • \t:制表符
    • \n:换行符
    • \r:回车符
    • \x21:十六进制字符(如 !
    • \u4E00:Unicode 字符(如 “一”)

标志(Flags)

标志说明示例(全局搜索)
i忽略大小写/aBc/i → “abc”、“ABC”
g全局匹配(所有结果)a 在 “aaa” 中匹配 3 次
m多行模式(^/$ 匹配每行)^a 匹配每行开头的 “a”
s单行模式(. 匹配换行符)a.c → “a\nc”(当 s 启用)

常用正则示例

邮箱验证

1
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

URL 提取

1
https?://[^\s/$.?#]+\.[^\s]+

日期匹配(YYYY-MM-DD)

1
\d{4}-\d{2}-\d{2}

中文汉字

1
[\u4e00-\u9fa5]

工具与学习资源

掌握正则表达式可大幅提升文本处理效率!建议从实际案例入手练习,逐步熟悉复杂语法。

本文参考:

-------------本文结束感谢阅读-------------
创作不易,您的支持将鼓励我继续创作!