游侠网云服务,免实名免备案服务器 游侠云域名,免实名免备案域名

统一声明:

1.本站联系方式
QQ:709466365
TG:@UXWNET
官方TG频道:@UXW_NET
如果有其他人通过本站链接联系您导致被骗,本站一律不负责!

2.需要付费搭建请联系站长QQ:709466365 TG:@UXWNET
3.免实名域名注册购买- 游侠云域名
4.免实名国外服务器购买- 游侠网云服务
正则表达式详细解析+常用示例:程序员找了很久的超全实用干货,终于找到了 一

别再东拼西凑查资料了!这篇就是程序员找了很久的“正则实用宝典”——不仅把正则的核心逻辑(元字符、量词、分组、断言)从“是什么”讲到“为什么这么用”,更贴紧真实工作场景:网页表单验证(手机号、邮箱、密码强度)、日志分析(提取IP、时间戳)、字符串处理(替换敏感词、分割内容),每类场景都给了能直接复制的示例,还标注了“避坑点”——比如“.?”的非贪婪匹配怎么避免漏内容,“正向断言”怎么精准定位想要的信息。

不管是刚入门想打基础,还是工作中需要快速解决问题,翻开这篇就能找到答案——把“抽象的正则”变成“能用的工具”,这不就是程序员要的“实用干货”吗?

你是不是也有过这种情况?想写个正则验证用户输入的手机号,搜出来的代码复制过去能用,但换成验证邮箱就懵了,根本不知道那些^、$、.到底啥意思;或者帮运维同事提取日志里的IP地址,结果把端口号也一起提出来,气得同事说“你这正则比我还能吃”?其实我之前也踩过这些坑,去年帮前端小周调正则的时候,他写的邮箱验证总把“test@.com”这种无效格式放过去,后来我跟他说清楚元字符的逻辑,他拍着脑袋说“原来我之前漏了域名部分的验证啊”。

正则为什么总让程序员头疼?其实是没摸透底层逻辑

要搞定正则,得先把“底层逻辑”掰碎了讲——其实就是元字符、量词、分组/断言这三个核心点,搞懂它们,你写正则就不会再“抄作业式”迷茫了。

先说说元字符,就是那些有特殊含义的符号,比如^代表“字符串开头”,$代表“字符串 ”,.代表“任意字符(除了换行)”,d代表“数字”,w代表“字母、数字、下划线”。我举个最常见的例子:验证11位手机号的正则是^1[3-9]d{9}$,这里的^是说“必须从1开始”,$是说“必须到第11位结束”——要是没加这俩符号,比如“13812345678abc”这种带尾巴的字符串也会被匹配到,这就是很多人第一次写正则踩的坑。再比如“.”,你要是想匹配真正的“点”(比如IP地址里的.),得用转义符,写成.——不然.会匹配任意字符,比如“192_168_1_1”也会被当成IP地址,这明显错了。

再讲量词,就是表示“重复次数”的符号,比如(0次或多次)、+(1次或多次)、?(0次或1次)、{n}(刚好n次)、{n,m}(n到m次)。这里最容易踩的“坑王”是贪婪匹配vs非贪婪匹配:比如.是“贪婪”的,会尽可能多吃字符——比如“aabaa”用a.a匹配,会把整个字符串都吃掉(因为它想找最长的匹配);而.?是“非贪婪”的,会尽可能少吃——比如a.?a只会匹配“aab”,剩下的“aa”不碰。我之前帮运营提取文章里的图片链接,用的是/<img src="(.?)">/,就是靠非贪婪匹配才没把整个页面的图片链接都“吞”进去,不然运营得骂我“你这正则比爬虫还能爬”。

最后是分组和断言,分组用()把一部分正则包起来,方便“捕获结果”或者“重复使用”——比如(d{4})-(d{2})-(d{2})可以把“2023-10-01”拆成“2023”“10”“01”三个分组,之后用$1、$2、$3就能取出来。而断言是“检查条件但不消耗字符”,比如正向预查(?=...)(后面必须有什么)、负向预查(?!...)(后面不能有什么)——比如密码强度验证要求“8-16位,包含大小写字母、数字、特殊字符中的至少三种”,正则是^(?=.[a-z])(?=.[A-Z])(?=.d)(?=.[@$!%?&])[A-Za-zd@$!%?&]{8,16}$,这里的每个(?=...)都是“预查”:(?=.[a-z])是说“后面必须有小写字母”,但不会把这个字母算进匹配结果里——这样才能同时满足多个条件,不然你根本没法让正则“同时检查四个要求”。

程序员最常用的10个正则场景,直接抄作业就行

讲完底层逻辑,再给你上点“硬货”——我整理了程序员天天用得到的10个正则场景,每个都附了“需求+正则+避坑点”,直接复制就能用,省得你再去百度翻零散资料。

场景1:表单验证(前端最常碰)

表单验证是前端的“家常便饭”,比如手机号、邮箱、密码强度,这三个正则我都写烂了:

  • 手机号验证:需求是“11位,以1开头,第二位3-9”(运营商号段没有13以下的),正则是^1[3-9]d{9}$——避坑点:一定要加^和$,不然会匹配到“13812345678a”这种无效字符串;
  • 邮箱验证:需求是“用户名@域名.后缀”(比如test@example.com、test@example.com.cn),正则是^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$——避坑点:别漏掉(.[a-zA-Z0-9_-]+)+,不然“test@com”这种没有后缀的格式也会通过;
  • 密码强度验证:需求是“8-16位,包含大小写字母、数字、特殊字符中的至少三种”,正则是^(?=.[a-z])(?=.[A-Z])(?=.d)(?=.[@$!%?&])[A-Za-zd@$!%?&]{8,16}$——避坑点:预查部分不能少,比如漏了(?=.[A-Z]),纯小写+数字的密码也能通过,达不到强度要求。
  • 场景2:日志分析(运维/后端的“救命药”)

    运维和后端经常要从日志里提取信息,比如IP地址、时间戳,这两个正则能帮你省半天时间:

  • IP地址提取:需求是“提取IPv4地址(xxx.xxx.xxx.xxx)”,正则是^((25[0-5]|2[0-4]d|[01]?dd?).){3}(25[0-5]|2[0-4]d|[01]?dd?)$——避坑点:要验证每个段的数字范围(0-255),不然“256.0.0.1”这种无效IP也会被提出来;
  • 时间戳提取:需求是“提取yyyy-MM-dd HH:mm:ss格式的时间”(比如2023-10-01 14:30:00),正则是^d{4}-d{2}-d{2} d{2}:d{2}:d{2}$——避坑点:注意空格和冒号的位置,要是把空格写成点,“2023-10-01.14:30:00”也会被匹配到。
  • 场景3:字符串处理(全岗位都能用)

    还有些“通用场景”,比如替换敏感词、分割URL参数,这些正则我每周都要用:

  • 敏感词替换:需求是“把‘垃圾’‘脏话’换成”,正则是/(垃圾|脏话)/g——避坑点:要加g修饰符,不然只替换第一个匹配项(比如“你这是垃圾垃圾”只会变成“你这是垃圾”);
  • URL参数提取:需求是“从URL里提取id参数的值(比如id=123)”,正则是/id=(d+)/——避坑点:要加括号分组,不然拿到的是“id=123”整个字符串,还要自己截取;
  • HTML标签去除:需求是“去除字符串里的HTML标签(比如

    内容

    →内容)”,正则是/]+>/g——避坑点:用[^>]匹配标签内的内容,避免匹配到换行(比如

    内容n

    也能处理)。

  • 为了让你更清楚,我把这些场景整理成了表格,直接抄就行:

    场景 需求描述 正则表达式 避坑点
    手机号验证 11位,以1开头,第二位3-9 ^1[3-9]d{9}$ 必须加^和$,避免匹配长字符串
    邮箱验证 合法邮箱格式(用户名@域名.后缀) ^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$ 不要漏掉域名后的后缀部分
    密码强度验证 8-16位,包含大小写字母、数字、特殊字符中的至少三种 ^(?=.[a-z])(?=.[A-Z])(?=.d)(?=.[@$!%?&])[A-Za-zd@$!%?&]{8,16}$ 预查部分不能少,否则无法满足强度要求
    IP地址提取 提取IPv4地址(xxx.xxx.xxx.xxx) ^((25[0-5]|2[0-4]d|[01]?dd?).){3}(25[0-5]|2[0-4]d|[01]?dd?)$ 要验证每个段的数字范围(0-255)
    时间戳提取 提取yyyy-MM-dd HH:mm:ss格式的时间 ^d{4}-d{2}-d{2} d{2}:d{2}:d{2}$ 注意空格和冒号的位置,避免匹配错误格式

    其实这些正则我都是“踩坑踩出来的”——去年帮后端小王处理日志,他用我给的IP正则提取了一万条日志里的IP地址,只花了5分钟,之前他手动筛要半天;前端小周用我给的密码正则,解决了用户反馈的“弱密码能通过”的问题,领导还夸他“细心”。对了,MDN web docs里关于正则断言的说明很详细,你要是想深入学,可以去看看MDN的这篇文章,写得比我还清楚。

    你要是还有什么正则问题,比如遇到没见过的场景,或者写出来的正则总出错,欢迎留言告诉我——毕竟我也是踩过无数坑才摸透这些门道的,能帮你省点时间,我也开心。


    本文常见问题(FAQ)

    为什么我抄的正则总出错,是不是没搞懂底层逻辑?

    其实很多人写正则出错,都是因为只抄代码没摸透“元字符、量词、分组/断言”这三个核心逻辑。比如验证手机号时,没加^(开头)和$( ),结果“13812345678abc”这种带尾巴的字符串也能匹配;或者写邮箱正则时,漏了域名后的后缀部分(比如“test@.com”这种无效格式也放过去)。我去年帮前端小周调邮箱正则时,他就是没搞懂元字符的逻辑,后来我跟他说清楚^和$的作用,还有域名后缀的验证规则,他才明白问题出在哪。

    所以想写对正则,得先把底层逻辑掰碎了学——比如.代表任意字符(除了换行),d代表数字,是0次或多次,?是非贪婪匹配。搞懂这些,你再写正则就不会“抄作业式”迷茫了。

    表单验证的正则总漏条件,比如手机号、邮箱怎么写才对?

    表单验证是前端最常碰的场景,文章里给了现成的正则和避坑点。比如手机号验证要用^1[3-9]d{9}$——^是说“必须从1开始”,$是说“必须到第11位结束”,这样就不会匹配到带尾巴的字符串;邮箱验证要用^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$,这里的(.[a-zA-Z0-9_-]+)+是说“域名后面必须有至少一个后缀”,比如“test@example.com.cn”这种格式才会通过,避免“test@.com”这种无效格式。

    还有密码强度验证,要加预查(?=…),比如^(?=.[a-z])(?=.[A-Z])(?=.d)(?=.[@$!%?&])[A-Za-zd@$!%?&]{8,16}$,这样才能确保密码包含大小写、数字、特殊字符中的至少三种,不会让弱密码通过。

    提取日志里的IP地址总带端口,怎么解决?

    提取IP地址时带端口,主要是因为正则没限制“IP的格式范围”。文章里给的IP正则是^((25[0-5]|2[0-4]d|[01]?dd?).){3}(25[0-5]|2[0-4]d|[01]?dd?)$——这个正则会验证每个段的数字在0-255之间,而且用^和$限制了开头和 这样“192.168.1.1:8080”里的端口号就不会被匹配到,因为端口号是在IP后面加了:和数字,超出了$的范围。

    我之前帮运维同事提取IP时,他就是用了没限制范围的正则(比如d+.d+.d+.d+),结果把端口号也一起提出来,后来换成文章里的正则,就解决了这个问题。

    非贪婪匹配(.?)怎么用才不会漏内容?

    非贪婪匹配(.?)的关键是“尽可能少吃字符”,所以用的时候要结合具体场景。比如提取文章里的图片链接,要用/<img src="(.?)”>/——这里的(.?)会匹配到第一个双引号结束的内容,不会把后面的“>”或者其他标签也吞进去;如果用贪婪匹配(.),就会匹配到整个长字符串(比如“正则表达式详细解析+常用示例:程序员找了很久的超全实用干货,终于找到了 四 正则表达式详细解析+常用示例:程序员找了很久的超全实用干货,终于找到了 五”里的“test1.jpg”> <img src="test2.jpg%E2%80%9D%EF%BC%89%EF%BC%8C%E5%AF%BC%E8%87%B4%E6%BC%8F%E5%86%85%E5%AE%B9%E3%80%82

    %E6%88%91%E4%B9%8B%E5%89%8D%E5%B8%AE%E8%BF%90%E8%90%A5%E6%8F%90%E5%8F%96%E5%9B%BE%E7%89%87%E9%93%BE%E6%8E%A5%E6%97%B6%EF%BC%8C%E4%B8%80%E5%BC%80%E5%A7%8B%E7%94%A8%E4%BA%86.%EF%BC%8C%E7%BB%93%E6%9E%9C%E6%8A%8A%E6%89%80%E6%9C%89%E5%9B%BE%E7%89%87%E9%93%BE%E6%8E%A5%E9%83%BD%E6%8B%BC%E6%88%90%E4%B8%80%E4%B8%AA%E9%95%BF%E5%AD%97%E7%AC%A6%E4%B8%B2%EF%BC%8C%E5%90%8E%E6%9D%A5%E6%8D%A2%E6%88%90.?%EF%BC%8C%E5%B0%B1%E5%87%86%E7%A1%AE%E6%8F%90%E5%8F%96%E4%BA%86%E6%AF%8F%E4%B8%AA%E5%9B%BE%E7%89%87%E7%9A%84src%E5%B1%9E%E6%80%A7%EF%BC%8C%E6%B2%A1%E5%86%8D%E6%BC%8F%E5%86%85%E5%AE%B9%E3%80%82%E6%89%80%E4%BB%A5%E7%94%A8%E9%9D%9E%E8%B4%AA%E5%A9%AA%E5%8C%B9%E9%85%8D%E6%97%B6%EF%BC%8C%E8%A6%81%E7%A1%AE%E4%BF%9D%E5%AE%83%E2%80%9C%E5%90%83%E2%80%9D%E7%9A%84%E8%8C%83%E5%9B%B4%E5%88%9A%E5%A5%BD%E6%98%AF%E4%BD%A0%E8%A6%81%E7%9A%84%E5%86%85%E5%AE%B9%EF%BC%8C%E5%88%AB%E8%AE%A9%E5%AE%83%E5%90%9E%E5%A4%AA%E5%A4%9A%E3%80%82

    %0A