是不是一听到 “正则表达式” 就头大?看着那些乱七八糟的符号 “^$.*+?()[]”,就像看天书一样;想验证个手机号、邮箱,搜来的表达式复制过去能用,自己改一个就出错;提取文本里的关键信息,试了半天要么漏匹配,要么匹配太多?别着急,今天兔子哥就带零基础的朋友入门正则表达式,7 天时间从语法到实战,手把手教你掌握常用表达式,以后验证、提取文本再也不用求人,一起往下看吧!
其实啊,正则表达式没那么难,它就是一种 “文字过滤器”,用特殊符号写规则,让电脑按规则找文字。就像筛沙子,你想要直径 3 毫米的沙子,做个 3 毫米的筛子就行,正则表达式就是这个 “筛子” 的图纸。
一、第一天:搞懂正则表达式到底是啥?能做啥?
可能有朋友会问,学这玩意儿有啥用?说白了,正则表达式就是帮你快速处理文字的工具,生活工作中到处都能用:
- 验证:比如注册账号时检查手机号格式对不对、邮箱有没有 @符号;
- 提取:从一大段文字里抓出所有手机号、网址、日期;
- 替换:把文本里的错别字统一替换,或者给敏感词打马赛克。
网友小李分享:“我之前整理客户资料,几百个手机号格式乱七八糟,用正则表达式一键提取加格式化,半小时搞定,之前手动弄要半天!” 所以说,学会正则能省超多时间。
正则表达式的核心就是 “规则”,咱们用符号写规则,比如想找所有数字,规则就是 “[0-9]”,电脑就会按这个规则把数字都找出来。
二、第二天:基础符号入门,这几个 “元老” 必须会
正则表达式的符号看着多,其实常用的就几个,第二天咱们先搞定最基础的:
1. 普通字符:就是你看到的文字本身
字母、数字、汉字这些,写在正则里就代表匹配它们自己。比如正则 “abc”,就能匹配文本里的 “abc” 字符串,简单吧?
2. 通配符 “.”:匹配任意一个字符(除了换行)
这个点可厉害了,代表任何一个字符。比如正则 “a.b”,能匹配 “a1b”“aab”“a@b”,只要中间是一个字符就行,但不能匹配 “ab”(中间没字符)或者 “a12b”(中间两个字符)。
3. 边界符号 “^” 和 “$”:限定开头和结尾
- “^” 表示开头,比如 “^abc”,只匹配以 “abc” 开头的字符串,像 “abc123” 能匹配,“xabc” 就不行;
- “”,只匹配以 “abc” 结尾的字符串,像 “123abc” 能匹配,“abcx” 就不行;
- 两个一起用 “^abc$”,就只能匹配 “abc” 这三个字符,多一个少一个都不行,常用在精确验证。
三、第三天:字符类 “[]”,批量匹配一类字符
第二天学的符号一次只能匹配单个或固定字符,第三天学的 “[]” 能批量匹配一类字符,超实用!
1. 匹配指定范围的字符
- “[0-9]”:匹配任意一个数字,和 “\d” 效果一样(后面会讲 \d);
- “[a-z]”:匹配任意一个小写字母;
- “[A-Z]”:匹配任意一个大写字母;
- “[a-zA-Z0-9]”:匹配任意一个字母或数字,也就是常见的 “字母数字组合”。
比如正则 “[0-9]{11}”,就能匹配 11 个数字(手机号长度),后面的 “{11}” 是量词,明天学~
2. 排除字符 “[^]”
在 “[]” 里加个 “^”,就表示 “不匹配这些字符”。比如 “[^0-9]”,匹配所有不是数字的字符,用来过滤非数字超方便。
四、第四天:量词 “*+?{}”,控制匹配次数
光有字符规则还不够,得告诉电脑匹配几次,这就是量词的作用,第四天重点学这四个:
| 量词 | 意思 | 例子 | 匹配效果 |
|---|---|---|---|
| * | 匹配 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”“aaaa” |
| {n,m} | 匹配 n 到 m 次 | a{2,3} | 匹配 “aa”“aaa” |
比如手机号是 11 位数字,正则就是 “^1 [3-9][0-9]{9}$”:
- “^1”:开头是 1;
- “[3-9]”:第二位是 3-9(手机号第二位规则);
- “[0-9]{9}”:后面 9 位是任意数字;
- “$”:结尾,确保总长度 11 位。
五、第五天:常用预定义类,偷懒专用符号
正则里有一些简写符号,代替常用的字符类,记不住全称的话,记这些简写更方便:
- “\d”:等同于 “[0-9]”,匹配数字;
- “\D”:等同于 “[^0-9]”,匹配非数字;
- “\w”:等同于 “[a-zA-Z0-9_]”,匹配字母、数字、下划线;
- “\s”:匹配空格、制表符、换行符等空白字符。
比如提取文本里的所有数字,用 “\d+” 比 “[0-9]+” 简单多了,写起来也快。
六、第六天:分组 “()” 和转义 “\”,处理复杂规则
遇到复杂规则,比如 “ababab” 这种重复的结构,就得用分组了,第六天学这两个进阶符号:
1. 分组 “()”:把多个字符当一个整体
比如正则 “(ab)+”,能匹配 “ab”“abab”“ababab”,因为 “(ab)” 是一个组,“+” 作用于整个组。
2. 转义 “\”:让特殊符号变普通
正则里的 “.”“*”“()” 这些是特殊符号,想匹配它们本身就得加 “\” 转义。比如想匹配 “www.baidu.com” 里的点,正则得写 “www.baidu.com”,不然 “.” 会匹配任意字符。
七、第七天:实战案例,这 3 个常用表达式必须会
学了六天语法,第七天用实战巩固,这三个场景天天能用到:
1. 验证邮箱格式
邮箱规则:用户名 @域名,比如 “abc123@qq.com”,正则表达式:
“^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+.[a-zA-Z0-9_-]+$”
- “[a-zA-Z0-9_-]+”:用户名可以是字母、数字、下划线、减号,至少 1 个;
- “@”:必须有 @符号;
- “[a-zA-Z0-9_-]+”:域名主体;
- “.”:点号转义;
- 最后是域名后缀,比如 “com”“cn”。
2. 提取文本里的所有手机号
一段文字里有多个手机号,用正则 “1 [3-9]\d {9}”,在提取工具里用这个规则,就能把所有手机号都抓出来,不用一个个找。
3. 替换敏感词
比如把文本里的 “垃圾” 替换成 “”,正则写 “垃圾”,替换成 “” 就行;如果有多个敏感词,用 “|” 分隔,比如 “垃圾 | 笨蛋”,一次性替换多个。
自问自答:新手常踩的坑,帮你填好了
问:为啥我写的正则匹配结果不对,要么漏要么多?
答:大概率是没加边界符 “^”。比如验证手机号,没加“^” 的话,“13800138000123” 这种超长数字也会被匹配(因为包含 11 位数字),加了 “^$” 就只会匹配正好 11 位的。
问:量词 “*” 和 “+” 到底啥区别?什么时候用哪个?
答:“” 可以匹配 0 次,“+” 至少匹配 1 次。比如验证 “是否填写手机号”,用 “\d {11}+”(必须填);如果是 “可选填手机号”,就用 “\d {11}”(可以不填)。
问:在线工具里测试能用,放到代码里就不行,咋回事?
答:可能是转义问题!比如在 JavaScript 里写正则,“\d” 要写成 “\d”,因为代码里 “\” 本身是转义符,得再加一个 “\” 才行,不同编程语言转义规则可能不一样,这点要注意。
兔子哥的小建议
学正则表达式千万别死记硬背,没用!最好的方法是 “边练边记”,找个在线正则测试工具(比如 “regex101”),看到一个规则就输进去试试,改改符号看匹配结果怎么变,印象会特别深。
刚开始别追求复杂表达式,先把手机号、邮箱这些常用的练熟,遇到问题就拆成小规则,比如手机号拆成 “开头 1”“第二位 3-9”“后面 9 位数字”,一步步拼起来。
其实正则表达式就像学拼音,刚开始觉得字母和声调难,但学会了就能拼所有汉字。7 天时间足够掌握常用规则,以后遇到文本处理问题,你会发现正则表达式真的超好用,省下来的时间喝杯奶茶不香吗?希望这篇教程能帮你轻松入门,以后处理文字再也不用愁啦!
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
评论列表
零基础学正则,7天轻松掌握。