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

统一声明:

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]」(匹配字母、数字、下划线和中文)。