Appearance
正则表达式入门教程
Written by gemini-3.1-pro-preview
不用担心它看起来像一堆乱码,其实它就像拼乐高积木,只要掌握了基础零件,你就能拼出无穷的玩法。
第一部分:什么是正则表达式?
想象一下,你在一个几万字的文档里找一个叫“张三”的人,你可以直接按 Ctrl+F 搜索“张三”。这很简单。 但是,如果你要找的是**“所有的手机号码”**呢?手机号有无数种组合,你不可能一个一个去搜。
这时候就需要正则表达式出场了。它是一种**“规则语言”**,你可以用它告诉电脑:“帮我找出一串连续的11位数字,并且是以1开头的。”
第二部分:认识基础“魔法符号”
正则表达式由普通字符(比如字母 a, 数字 1)和特殊符号(也叫元字符,有魔法效果)组成。我们先来认识几个最常用的“魔法符号”:
1. 占位符(代表某一种字符)
\d:代表任意一个数字(digit)。比如\d\d\d可以匹配 "123" 或 "999"。\w:代表任意一个字母、数字或下划线(word)。比如\w可以匹配 "A", "b", "5", "_"。\s:代表任意一个空白符(包括空格、回车、Tab等)。.(英文句号):代表除了换行符以外的任意一个字符。它是超级万能牌。
(💡小提示:把上面的字母大写,意思就完全相反。比如 \D 代表不是数字的字符。)
2. 量词(规定出现了多少次)
如果我们要匹配11位手机号,写11个 \d 太傻了。我们可以用量词:
*:出现 0 次或多次(可以没有,也可以有无数个)。+:出现 1 次或多次(至少得有一个)。?:出现 0 次或 1 次(代表它是可选的,有或没有都行)。{n}:精准出现 n 次。比如\d{11}就代表正好11位数字(完美的手机号匹配!)。{n,m}:出现 n 到 m 次。比如\d{3,4}可以匹配3到4位数字(比如区号 "010" 或 "0592")。
3. 字符组(多选一)
[ ]:方括号里的字符,只要命中一个就算数。[abc]:匹配 "a" 或 "b" 或 "c"。[0-9]:等同于\d。[a-zA-Z]:匹配所有的英文字母。
第三部分:小试牛刀(匹配实战)
我们来做个小练习,匹配一个格式为 年-月-日 的日期,比如 2023-10-25。
- 年份是4个数字:
\d{4} - 中间有个横杠:
- - 月份是2个数字:
\d{2} - 中间有个横杠:
- - 日子是2个数字:
\d{2}
组合起来!日期的正则表达式就是:\d{4}-\d{2}-\d{2}
第四部分:进阶魔法 —— 提取与替换($1, $2 登场)
这是正则表达式最强大、最神奇的功能!在很多文本编辑器(如 VS Code, Notepad++)或者编程语言中,我们不仅要找到文本,还要改变它的格式。
1. 括号的作用:打包装箱(捕获组)
在正则里,小括号 ( ) 的作用是把匹配到的内容单独打包,装进带编号的箱子里,留着后面用。
我们拿刚才的日期 2023-10-25 举例。我们给刚才的正则加上括号: (\d{4})-(\d{2})-(\d{2})
电脑不仅会匹配出 "2023-10-25",还会偷偷做以下操作:
- 把第一个括号匹配到的
2023装进 1号箱。 - 把第二个括号匹配到的
10装进 2号箱。 - 把第三个括号匹配到的
25装进 3号箱。
2. 召唤箱子:$1, $2, $3
在“替换(Replace)”操作中,我们可以用 $1 来代表1号箱里的内容,$2 代表2号箱,以此类推。
实战任务:把 2023-10-25 改成美国习惯的日期格式 10/25/2023 (月/日/年)。
- 搜索规则 (Regex):
(\d{4})-(\d{2})-(\d{2}) - 替换为 (Replace):
$2/$3/$1
见证奇迹的时刻: 电脑会读取 $2(也就是10),接着写一个 /,然后读取 $3(也就是25),再写一个 /,最后读取 $1(也就是2023)。 瞬间,所有的日期都被完美转换了!
3. 再来个例子:中英文人名翻转
假设你有一堆名字:Ming Yao (姚明), San Zhang (张三)。 你想把它们统一改成:Yao, Ming , Zhang, San。
- 分析:名字包含两个单词,中间是一个空格。单词可以用
\w+(一个或多个字母)来匹配。 - 搜索规则:
(\w+)\s(\w+)- 第一个
(\w+)会抓取 First name(如 Ming),装进 1号箱。 - 中间的
\s匹配空格。 - 第二个
(\w+)会抓取 Last name(如 Yao),装进 2号箱。
- 第一个
- 替换为:
$2, $1
结果:Ming Yao 瞬间变成了 Yao, Ming!
第五部分:避坑小指南(转义字符)
如果我就是想匹配文本里的一个实实在在的“句号(.)”或者“加号(+)”怎么办?因为它们被正则征用为魔法符号了。 答案是:在前面加一个反斜杠 \ 打回原形(这叫转义)。
- 匹配普通的句号:
\. - 匹配普通的加号:
\+ - 匹配普通的括号:
\(和\)
比如匹配带小数点的金额 9.99,正则应该是:\d\.\d{2}。
更多
掌握以上基础语法基本上已经够用了
如果你想要学习更多,推荐前往 菜鸟教程 或直接搜索 正则表达式 阅读更多进阶教程