

统一声明:
1.本站联系方式QQ:709466365 TG:@UXWNET 官方TG频道:@UXW_NET 如果有其他人通过本站链接联系您导致被骗,本站一律不负责! 2.需要付费搭建请联系站长QQ:709466365 TG:@UXWNET 3.免实名域名注册购买- 游侠云域名 4.免实名国外服务器购买- 游侠网云服务
从0到1搞懂正则表达式:不用背规则的入门法
很多人一听到“正则表达式”就觉得头大,觉得全是密密麻麻的符号,像看天书。其实我刚开始学的时候也这样,对着教程里的d+
[a-z]
完全懵圈。后来发现,把它当成“文字积木游戏”就好理解多了——你要做的不是背公式,而是学会用这些“积木块”拼出你想要的“文字模板”。
什么是正则表达式?说人话就是“文字过滤器”
简单说,正则表达式就是一套“文字匹配规则”。比如你想在一堆文本里找出所有手机号,就告诉电脑:“帮我找11位数字,而且第一位是1”;想验证邮箱格式,就说:“得有个@符号,@前面是字母数字,后面得有个点和域名”。电脑根据这些规则去扫描文本,找到符合条件的内容——这就是正则表达式的核心作用:按规则找文字、验证文字格式。
我举个真实例子:去年帮做新媒体的朋友处理用户留言,她需要从5000条留言里提取提到“客服”的句子,手动翻了2小时才找了100多条。我用正则表达式写了个.客服.
(意思是“任意文字+客服+任意文字”),3秒钟就把所有相关留言筛选出来了。她当时直呼“这比Ctrl+F厉害100倍”——其实这就是正则最基础的用法。
核心“积木块”:5个元字符让你搞定80%场景
不用记几十种符号,先掌握这5个最常用的“积木块”,日常场景基本够用:
元字符 | 大白话解释 | 举个例子 | 匹配效果 |
---|---|---|---|
. |
任意一个字符(除了换行) | a.c |
匹配“abc”“a1c”“a@c”(中间是任意字符) |
前面的字符出现0次或无数次 | abc |
匹配“ac”(b出现0次)、“abc”(b出现1次)、“abbbbc”(b出现多次) | |
+ |
前面的字符出现1次或无数次 | ab+c |
匹配“abc”“abbc”,但不匹配“ac”(b至少出现1次) |
? |
前面的字符出现0次或1次 | ab?c |
匹配“ac”“abc”,不匹配“abbc”(b最多出现1次) |
[] |
字符集合,只能选一个 | a[0-9]c |
匹配“a0c”“a5c”“a9c”(中间只能是0-9的数字) |
你看,这些符号其实就像“文字开关”:.
是“任意门”,是“无限复制”,[]
是“选择题”。刚开始记不住没关系,我 你用“场景联想”——比如看到[0-9]
就想“这是数字选择题,只能选0到9里的一个”,看到+
就想“前面那个字符至少得出现一次,不能没有”。
新手必用工具:边试边学比死记规则强10倍
我见过很多人学正则的误区:抱着文档背符号,背完还是不会用。其实最有效的方法是“边写边试”。这里推荐两个我自己常用的工具,完全免费,新手必备:
1[3-9]d{9}
,它会标红解释“1后面跟着3-9的数字,然后是9个数字”——比看教程直观10倍。 Ctrl+F
打开查找框,勾选“正则表达式”图标(长得像.
),就能直接用正则搜索文本。我平时写文章找错别字、替换重复句子,全靠这个功能。 我刚开始学的时候,就是用Regex101测试各种规则:想匹配“2023年”就试2023年
,想匹配“202X年”就试202[0-9]年
,看着右边文本里的匹配结果从红色变成绿色,慢慢就理解每个符号怎么用了。记住:正则表达式不是背出来的,是试出来的。
3大高频验证场景:直接套用的表达式+避坑指南
学会基础规则后,最实用的就是用正则表达式做“格式验证”。比如表单提交时检查手机号、邮箱是否填对,数据清洗时过滤无效信息。下面这3个场景是我工作中用得最多的,每个都给你现成的表达式和“踩坑经验”,直接复制就能用。
手机号验证:别让新号段用户一直“格式错误”
你可能觉得手机号验证很简单:“不就是11位数字吗?写个d{11}
不就行了?” 但实际用的时候会发现问题:比如用户输了“013800138000”(12位)会被放过,输了“12345678901”(第一位是1但第二位是2,非正规号段)也会通过。
正确的手机号正则表达式应该考虑两点:长度必须11位、号段符合工信部规范。现在手机号开头是1,第二位是3-9(早期13、15段,后来增加17、19等新号段),所以表达式可以写成:
^1[3-9]d{9}$
符号拆解 | 意思 |
---|---|
$
|
开头和 (确保整个字符串就是手机号,不是“abc13800138000def”这种包含手机号的文本) |
1 |
第一位固定是1 |
[3-9] |
第二位可以是3-9的数字(覆盖所有正规号段) |
d{9} |
后面跟9位数字(1+1+9=11位) |
我踩过的坑:之前给一个电商网站写表单验证,用了简单的d{11}
,结果有用户反馈“我的199开头手机号一直提示错误”——后来才发现199是新号段,第二位是9,而早期表达式写的[3-8]
,把9排除了。所以记得号段范围要写全[3-9],别漏了新号段。
邮箱验证:别让“下划线邮箱”被误判
邮箱格式看起来简单(xxx@xxx.xxx),但实际验证时容易出错。比如用户输“abc_def@qq.com”(含下划线),或“a.b.c@163.com”(@前有多个点),很多简单表达式会判为错误。
正确的邮箱正则表达式需要允许:@前可以有字母、数字、下划线、点、减号;@后域名可以有多个层级(比如“mail.qq.com”)。推荐用这个:
^w+([-+.]w+)@w+([-.]w+).w+([-.]w+)$
可能看起来复杂,但你不用全记住,重点看避坑点:
w+([-+.]w+)
表示“字母数字下划线开头,后面可以跟(减号/加号/点+字母数字下划线),比如“abc-def+ghi@xxx.com”是合法的 w+([-.]w+).w+
可以匹配“qq.com”“mail.163.com”“company.co.uk”这种多级域名 MDN Web Docs里提到,邮箱验证的核心是“平衡严格性和用户体验”——太严格会拦截合法邮箱,太宽松会放过明显错误(比如没有@符号)(链接:https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/input/email” rel=”nofollow”)。我通常会先用上面的表达式做基础验证,再结合后端发送验证码,双重保险。
身份证验证:不止18位,还要考虑X和出生日期
身份证验证是最容易踩坑的场景,很多人只写^d{18}$
,结果用户输了“123456789012345678”(18位数字但无效)也通过,或输了“12345619900101123X”(最后一位是X,被当成错误)。
18位身份证的正确验证需要考虑:6位地区码+8位出生日期+3位顺序码+1位校验码(可能是X)。表达式可以写成:
^d{6}(19|20)d{2}(0[1-9]|1[0-2])(0[1-9]|[12]d|3[01])d{3}[dXx]$
重点避坑点:
(19|20)d{2}
确保年份是19xx或20xx年;(0[1-9]|1[0-2])
限制月份01-12;(0[1-9]|[12]d|3[01])
限制日期01-31(虽然不能完全校验闰月,但比单纯d{8}
好很多) [dXx]
,允许大写X、小写x或数字 我帮HR朋友处理员工信息时,遇到过“身份证最后一位是X却小写输入”的情况,早期表达式只写了d
,导致这些数据被标为“无效”。后来改成[dXx]
,才解决问题。记住:用户输入习惯千差万别,正则表达式要“包容合理的多样性”。
如果你按这些表达式试了,记得用Regex101测试几个例子:比如手机号输“13800138000”(正确)、“12345678901”(第二位2,错误);邮箱输“a_b+c@qq.com”(正确)、“abc@.com”(@后无域名,错误)。测试通过后再放到实际项目里,能少走很多弯路。
最后想说,正则表达式看起来复杂,但实际用起来就像“学骑自行车”——刚开始觉得难,练几次就顺手了。你不用追求成为专家,记住今天这些基础规则和实例,就能解决大部分日常问题。如果试的时候遇到奇怪的bug,或者有其他想验证的场景,欢迎在评论区告诉我,咱们一起看看怎么搞定!
其实真不用被“正则表达式”这名字吓住,我当初刚接触的时候,对着教程里的符号列表发懵,以为得啃半个月才能入门,结果后来发现完全是自己想复杂了。你要是每天能抽30分钟折腾这个,1-2周绝对能搞定日常要用的基础操作——别不信,我那会儿就是这么过来的:早上通勤路上用手机刷10分钟核心符号的用法(就记那几个最常用的,比如点代表任意字符、星号代表重复,不用贪多),晚上回家花20分钟打开Regex101,找个小需求动手试。比如第一天试试“怎么匹配带区号的手机号”,第二天试试“怎么把文本里的日期都挑出来”,边试边改,比抱着教程死记硬背快多了。
快速上手的关键真不是“学”而是“用”,就像学骑自行车,看再多教程不如自己蹬两脚。你刚开始不用急着自己写表达式,先找个现成的改改参数就行。比如你想验证手机号,网上一搜能找到^1[3-9]d{9}$
,别盯着这个字符串发呆,直接复制到Regex101里,右边随便输几个号码试试:输“13800138000”,发现能匹配;输“12345678901”,发现匹配不上——这时候你就知道第二位数字的范围[3-9]
起作用了。再故意把表达式里的[3-9]
改成[2-9]
,再试“12345678901”,发现能匹配了,这不就明白[3-9]
是限制第二位数字的吗?就这么一点点调参数、看结果,比背定义记得牢多了。我当初学邮箱验证的时候,就是先复制别人的表达式,然后把@
改成#
,看哪些邮箱地址会被漏掉,慢慢就搞懂每个符号的作用了。
零基础学正则表达式需要多久?有没有快速上手的方法?
其实不用太长时间,每天花30分钟练习,1-2周就能掌握基础用法。快速上手的关键是“边用边学”:先记住文中提到的5个核心元字符(. + ? []),然后找一个具体需求(比如验证手机号),用Regex101这样的工具边试边调,比死记教程效率高很多。我当时就是先复制现成的表达式改参数,慢慢就理解规则了。
除了手机号、邮箱和身份证,正则表达式还能用来做什么?
正则表达式的应用场景非常广。比如处理数据时提取日期(如“2023-10-05”)、清洗文本中的多余空格(把多个空格替换成一个)、甚至在Excel里用“查找替换”功能批量修改内容。我之前帮财务朋友处理报表,用正则表达式10分钟就把“2023年10月5日”统一改成“2023-10-05”格式,比手动改快了几十倍。
为什么我写的正则表达式在不同工具里效果不一样?比如在Word和Python里结果不同?
这是因为不同工具支持的正则“方言”不同,最常见的有PCRE(如Regex101、PHP)、JavaScript正则、Python正则等,部分符号规则有细微差异(比如换行符匹配、贪婪模式等)。如果遇到不一致, 先查工具的正则语法说明,或者用通用表达式(比如文中的手机号、邮箱验证表达式,大部分工具都支持)。
正则表达式里的“^”和“$”必须加吗?不加会有什么问题?
不一定必须加,但加了能更精确。“^”表示字符串开头,“$”表示 主要用来确保“整个字符串”符合规则。比如验证手机号时,如果不加“^”和“$”,表达式1[3-9]d{9}可能会匹配到“13800138000123”(14位数字,多了3位),因为它“包含”了11位手机号;加了之后^1[3-9]d{9}$,就只会匹配刚好11位的字符串,避免这种误判。
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!
站长QQ:709466365 站长邮箱:709466365@qq.com