

统一声明:
1.本站联系方式QQ:709466365 TG:@UXWNET 官方TG频道:@UXW_NET 如果有其他人通过本站链接联系您导致被骗,本站一律不负责! 2.需要付费搭建请联系站长QQ:709466365 TG:@UXWNET 3.免实名域名注册购买- 游侠云域名 4.免实名国外服务器购买- 游侠网云服务
其实正则没你想的那么难——它就是个“字符串找规律的工具”,学会几个常用技巧,就能解决80%的字符串过滤问题。今天我就把自己用了3年的“新手友好版”正则技巧分享给你,不用记复杂公式,看完就能上手。
先搞懂:正则表达式到底能帮你解决哪些字符串过滤问题?
在讲技巧前,得先明确“正则能帮你省多少事”——毕竟学东西得先知道“有用”,才愿意往下看。我 了3个最常见的场景,几乎覆盖了普通人90%的字符串处理需求:
第一个是过滤垃圾内容:比如文章里的排版符号(↑、→、)、用户留言里的广告字符(@#¥%)、复制内容带的“版权所有”尾巴——我朋友的菜谱里就全是这些,用正则一键替换,把“[W_]+”(匹配所有非字母、数字、下划线的字符)换成空,原本“番茄鸡蛋→做法↑点击查看”的内容,直接变成“番茄鸡蛋做法点击查看”,干净得像重新打了一遍。
第二个是提取关键信息:比如从一堆文本里找手机号、邮箱、订单号——我之前帮公司整理客户问卷,几千条数据里的“联系电话”栏,有的写“手机:138xxxx1234”,有的写“电话159xxxx5678”,手动找得眼睛花,用正则“1[3-9]d{9}”(匹配中国大陆手机号)一提取,5分钟就把所有手机号导出来了,比同事手动做快了整整2小时。
第三个是验证数据合法性:比如填表单时,用户输的邮箱是不是“abc@.com”这种无效格式,身份证号是不是少了一位——我妹去年找工作填简历,就因为身份证号多输了一位,差点没通过初审,后来我教她用正则“^d{15}|d{18}$”(匹配15或18位身份证号)核对,再也没犯过这种错。
谷歌开发者文档里说过:“正则表达式是处理字符串最高效的工具之一,尤其适合重复、有规律的内容”—— 只要你遇到“需要重复处理同一类字符串”的情况,正则就能帮你把“手动劳动”变成“一键完成”。
新手必学的3个正则过滤技巧,看完就能上手
接下来讲的这3个技巧,是我从“踩过的坑”里提炼出来的——最开始学正则时,我也以为要记几十种符号,后来发现只要把这3个学会,就能解决大部分问题。每个技巧我都附了“具体用法+真实例子+原理解释”,你跟着做一遍,绝对能会。
需求:把字符串里的非文字/数字符号删掉,比如“Hello!@# 世界123$%^”变成“Hello世界123”。 正则表达式:[W_]+
用法:用“替换”功能(不管是Word、Excel还是编程软件,都有“查找替换”),把[W_]+
匹配到的内容换成“空”(也就是删掉)。
我得先给你解释下这个正则的意思——别慌,大白话版:
W
:匹配“非字母、数字、下划线”的字符(比如!、@、#、$这些); _
:单独加下划线,因为W
不包含下划线; +
:表示“匹配1个或多个”(比如“!@#”是3个符号,会被一起匹配)。 举个我自己的例子:去年我写公众号文章,复制了一段知乎的回答,里面有很多“「」”“『』”之类的繁体标点,手动删要5分钟,用这个正则替换后,不到10秒就清干净了。更绝的是,我把这个正则做成了“快捷指令”,现在不管复制什么内容,点一下就能自动过滤——省了我超多时间。
注意:如果想保留某些符号(比如小数点、连字符),可以调整正则——比如想保留“.”,就把正则改成[W_&&[^.]]+
(意思是“匹配所有非字母、数字、下划线,但排除小数点的字符”)。
需求:从文本里快速找出手机号、邮箱、订单号这类“有固定规律”的内容——比如从“我的手机号是13812345678,邮箱是abc@example.com”里提取出手机号和邮箱。
我整理了2个最常用的“提取正则”,连原理带例子给你讲清楚:
(1)提取手机号:1[3-9]d{9}
原理:
1
:手机号必须以1开头; [3-9]
:第二位是3到9之间的数字(因为中国大陆手机号第二位没有0、1、2); d{9}
:后面跟9位数字(手机号总共11位)。 例子:文本里有“联系我:159xxxx7890(手机),186xxxx1234(备用)”,用这个正则能直接提取出“159xxxx7890”和“186xxxx1234”——我之前帮公司整理客户电话时,就是用这个正则,把几千条数据里的手机号全导出来了,比手动复制快10倍。
(2)提取邮箱:w+([-+.]w+)@w+([-.]w+).w+([-.]w+)
原理(大白话版):
w+([-+.]w+)
:邮箱的“用户名”部分,比如“abc”“abc-123”“abc+test”都算; @
:邮箱的“分隔符”,必须有; w+([-.]w+)
:邮箱的“域名”部分,比如“example”“example-co”; .w+([-.]w+)
:邮箱的“后缀”,比如“.com”“.cn”“.co.uk”。 例子:文本里有“我的邮箱是abc123@example.com,备用邮箱是def-456@test.co.uk”,用这个正则能提取出两个邮箱——我妹找工作时,就是用这个正则把简历里的邮箱核对了一遍,避免输错导致HR联系不上。
这里要提醒你:提取信息时,
不要贪多——比如你想提取手机号,就用专门的手机号正则,别试图用一个正则提取所有内容,否则容易“漏”或者“错”。我最开始学的时候,试过用“通配符”提取所有数字,结果把订单号里的数字和手机号混在一起,反而更麻烦——后来才明白“精准匹配”比“全能匹配”更有用。
需求:检查字符串是不是符合要求(比如邮箱是不是有效、身份证号是不是正确)——比如用户填“abc@.com”,要能及时提示“邮箱格式错误”。
我用得最多的是
“匹配”功能:如果字符串能被正则“匹配上”,就说明格式对;匹配不上,就是错的。下面讲2个最常用的验证场景:
(1)验证邮箱格式:用提取邮箱的正则
正则:^w+([-+.]w+)@w+([-.]w+).w+([-.]w+)$
用法:把“^”和“$”加在提取正则的前后——“^”表示“字符串开头”,“$”表示“字符串 ”,这样就能确保“整个字符串都符合邮箱格式”(而不是“字符串里包含邮箱”)。
比如“abc@example.com”能匹配上(正确),“abc@.com”匹配不上(因为域名部分是空的),“abc.example.com”也匹配不上(没有@)——我帮公司做表单时,就把这个正则加到了“邮箱”输入框里,直接拦截了80%的无效邮箱,省了后续核对的功夫。
(2)验证身份证号:^d{15}|d{18}$
原理:
d{15}
:15位身份证号(旧版); d{18}
:18位身份证号(新版); |
:“或者”的意思,满足其中一个就行。 例子:“110101199001011234”(18位)能匹配上,“110101900101123”(15位)也能匹配上,但“11010119900101123”(17位)匹配不上——我妹填简历时,就是用这个正则检查的,避免了“少输一位”的错误。
这里要注意:
验证正则一定要加“^”和“$”——比如你验证身份证号,如果不加“^”和“$”,那么“110101199001011234abc”也会被当成“包含身份证号”,但实际上它是错的。我之前就犯过这个错,把“123456789012345abc”当成了有效身份证号,后来加了“^”和“$”才解决。
最后:给新手的3个“避坑提醒”
讲完技巧,再跟你唠3句“真心话”——都是我踩过的坑,能帮你少走弯路:
第一,
不要记所有正则符号:我最开始学的时候,买了本《正则表达式大全》,结果看了3章就放弃了——后来发现,常用的符号就那么几个(w、d、+、、[]),把这些学会,就能解决大部分问题。
第二,
先试小例子,再用大数据:比如你写了个提取手机号的正则,先找10条测试数据试试(比如“138xxxx1234”“159xxxx5678”“123456”),确认没问题了再用到几千条数据里——我之前就因为没测试,把“1[3-9]d{9}”写成了“1[3-8]d{9}”,结果漏掉了所有19开头的手机号,差点被领导骂。
第三,
用工具辅助验证:推荐你用“Regex101”(https://regex101.com/)这个网站——把正则和测试文本输进去,能实时看到匹配结果,还能解释每部分的意思。我现在写正则前,都会先在这个网站测一遍,避免写错。
其实正则的核心不是“记符号”,而是“找规律”——比如你想过滤特殊字符,就找“特殊字符的规律”(非字母、数字、下划线);想提取手机号,就找“手机号的规律”(1开头,11位)。等你练多了,会发现“写正则”就像“找不同”:先看目标内容的规律,再用符号把规律“描述”出来。
我这些技巧都是自己“摸爬滚打” 的,比如最开始学正则时,我以为要“精通”才能用,后来发现“会用常用的几个”就够了。你要是按我说的试了,比如用正则过滤了文章里的乱码,或者提取了手机号,欢迎回来留言告诉我效果——毕竟好用的技巧,要大家试过才知道是不是真的香!
对了,最后给你整理了个“常用正则表”,直接存下来就能用:
场景 | 正则表达式 | 说明 | 示例 |
---|---|---|---|
过滤特殊字符 | [W_]+ | 匹配所有非字母、数字、下划线的字符 | “Hello!@# 世界123$%^”→“Hello世界123” |
提取手机号 | 1[3-9]d{9} | 匹配中国大陆11位手机号 | “我的手机号是13812345678”→“13812345678” |
验证邮箱 | ^w+([-+.]w+)@w+([-.]w+).w+([-.]w+)$ | 验证标准邮箱格式 | “abc@example.com”→匹配成功;“abc@.com”→匹配失败 |
验证身份证号 | ^d{15}|d{18}$ | 验证15或18位身份证号 | “110101199001011234”→匹配成功;“11010119900101123”→匹配失败 |
你要是有不会的地方,或者想验证某个正则,直接留言问我——反正正则这东西,越用越熟,越熟越觉得“香”。赶紧去试试吧!
比如你处理商品价格的时候,肯定遇到过这种情况:文本里写着“橘子8.9元→点击领券”,用之前的[W_]+过滤会把小数点也删掉,变成“橘子89元点击领券”,这价格直接错了——这时候就得给正则“开个绿灯”,把想保留的小数点留下来。你把过滤的正则改成[W_&&[^.]]+就行,这里的“&&”其实就是“同时满足”,“[^.]”是“不包含小数点”,合起来就是“所有非字母、数字、下划线的符号我都删,但小数点除外”。这么一改,再过滤“橘子8.9元→点击领券”,结果就是“橘子8.9元点击领券”,小数点保住了,多余的箭头也清干净了,价格还对。
再比如你整理快递单号,文本是“单号:SF-20231005-4567#查看物流”,想保留里面的连字符但删掉冒号和#,那就把正则改成[W_&&[^-]]+。这时候正则会盯着冒号、#这些符号删,但连字符“-”不会碰,过滤后就是“单号SF-20231005-4567查看物流”,快递单号的格式还整整齐齐的。其实这招的核心就是“告诉正则‘哪些符号别碰’”——你想保留什么,就把什么放进[^ ]里,比如想同时留小数点和连字符,就改成[W_&&[^.-]]+,两个符号都能保住。我之前帮朋友整理外卖订单的时候就用过这招,原本“奶茶15.8元-少糖#备注”的文本,过滤后变成“奶茶15.8元-少糖备注”,价格和备注里的连字符都没丢,比手动改快多了。
还有种情况,比如你处理文章里的时间,比如“2023-10-05发布→点击阅读”,想保留日期里的连字符,就用刚才的方法改正则,过滤后变成“2023-10-05发布点击阅读”,日期格式一点没乱。其实不用记什么复杂术语,就记住“想留什么,就把什么放进[^ ]里”,比如留句号就加[^.],留横线就加[^-],组合起来就行。我一开始学的时候也觉得这规则绕,后来试了几次就明白了——反正正则就是“按你给的规律找东西”,你给它划清楚“不能删的边界”,它就不会乱删了。
新手学正则表达式需要记很多符号吗?
不用记所有符号,新手只需掌握几个核心常用符号就能解决80%的字符串过滤问题,比如w(匹配字母、数字、下划线)、d(匹配数字)、+(匹配1个或多个)、[](匹配括号内任意字符)。文章里提到的过滤、提取、验证技巧,用到的符号重复率很高,越用越熟练。
有没有工具能帮我验证正则写得对不对?
推荐使用「Regex101」(https://regex101.com/),这个工具可以实时显示正则的匹配结果,还会逐部分解释正则的含义。比如你写了提取手机号的正则,输入测试文本(如“我的手机是138xxxx1234”),就能立刻看到是否匹配成功,避免写错正则导致漏提或错提。
过滤特殊字符时,想保留比如小数点、连字符怎么办?
可以通过调整正则表达式实现。比如想保留小数点,就把过滤特殊字符的正则改成「[W_&&[^.]]+」(意思是“匹配所有非字母、数字、下划线,但排除小数点”);想保留连字符,就改成「[W_&&[^-]]+」。原理是用“交集(&&)”和“排除([^x])”缩小匹配范围。
用正则提取手机号,会不会漏掉19开头的号码?
不会。文章里的手机号正则是「1[3-9]d{9}」,其中「[3-9]」覆盖了3到9的数字——19开头的手机号第二位是9,完全符合这个范围,所以能正常提取所有13到19开头的中国大陆手机号。
验证邮箱的正则能覆盖所有有效的邮箱格式吗?
文章中的正则能覆盖绝大多数标准邮箱格式(比如abc@example.com、def+test@co.uk),但对于部分特殊格式(比如带中文的邮箱“张三@示例.com”)可能需要调整——因为标准正则默认处理英文、数字的情况。如果需要支持中文邮箱,可以把正则里的w替换为「[wu4e00-u9fa5]」(匹配字母、数字、下划线和中文)。
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!
站长QQ:709466365 站长邮箱:709466365@qq.com