🏠 首页 攻略 正则表达式是什么?程序员必学的文本搜索超能力

正则表达式是什么?程序员必学的文本搜索超能力

正则表达式(Regex)是处理文本的神器。学会它,搜索、验证、替换文本一气呵成。本文用生活例子讲透正则核心概念。

正则是什么?用电话簿来理解

你有没有在电话簿里找过名字?

如果你想找"所有姓张的人",你会把整本电话簿翻一遍,只看名字首字是"张"的条目。

正则表达式就是干这事的神器——它让你用一套描述规则的方式,快速找到或替换文本里的特定内容。

正则的全称是 Regular Expression,简称 Regex。它看起来像乱码,但其实是一套有规律的"搜索语法"。

^1[3-9]\d{9}$

这串符号的意思是:以1开头、第二位是3-9、后面跟9个数字的手机号。你以后会经常见到它。

为什么要学正则?

你会问:我直接用 Ctrl+F 搜索不就行了吗?

Ctrl+F 能搜"苹果",但搜不了"所有以A开头、以E结尾的单词"。正则就能。

几个常见场景:

  • 验证表单:邮箱格式对不对?手机号是不是11位?密码够不够强?
  • 批量替换:把文档里所有日期格式 2024-01-01 改成 2024/01/01
  • 数据抓取:从网页里提取所有链接地址
  • 日志分析:在百万行日志里找特定错误模式

学会正则,你处理文本的效率会翻好几倍。

正则核心语法

基础字符

写法含义例子
abc匹配字母abccat 匹配 “cat”
.匹配任意单个字符c.t 匹配 “cat”、“cut”
\d匹配数字(0-9)\d\d 匹配 “12”、“99”
\w匹配字母/数字/下划线\w\w\w 匹配 “abc”
\s匹配空白字符\s 匹配空格、换行

数量词

写法含义
*0次或多次
+1次或多次
?0次或1次
{3}恰好3次
{2,5}2到5次

举个例子:\d{3}-\d{8} 能匹配国内座机号,如 010-12345678

边界和分组

写法含义
^开头
$结尾
``
()分组,方便重复或提取

比如 ^https?:// 能匹配 http://https:// 开头的网址。

实战例子

验证邮箱

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

这段的意思是:

  • 前面可以有字母数字和 ._%+-
  • 中间有个 @
  • 后面是域名,至少有两个字母的扩展名

提取手机号

1[3-9]\d{9}

匹配所有中国大陆手机号。测试一下:

  • 13812345678
  • 12345678901 ❌(第二位不是3-9)
  • 1381234567 ❌(只有10位)

替换日期格式

2024-01-15 改成 2024/01/15

(\d{4})-(\d{2})-(\d{2})  →  $1/$2/$3

括号里的内容会被存成"捕获组",替换时可以用 $1$2 引用。

常见误区

误区一:正则越复杂越好

其实简单场景用简单正则。别为了炫技写一堆看不懂的符号。

误区二:正则万能

正则适合文本处理,但不适合解析 HTML 或 JSON 这种有严格结构的东西。该用工具的时候别硬上。

误区三:记住所有语法

没人能记住全部语法。遇到不会的查一下就行,重点是理解思路。

总结

正则表达式是一套描述文本模式的工具。它看起来像天书,但核心逻辑很简单:

  1. 用特殊符号描述你想要的"样子"
  2. 工具帮你找出所有匹配的文本
  3. 需要的话,还能批量替换

学会正则,以后处理文本再也不用手翻、手改了。

你现在就可以试试——打开 VS Code 或任何编辑器,在搜索框里输入 \d+,看看能不能匹配到所有数字。