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

统一声明:

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

2.需要付费搭建请联系站长QQ:709466365 TG:@UXWNET
3.免实名域名注册购买- 游侠云域名
4.免实名国外服务器购买- 游侠网云服务
一文搞懂正则表达式基础语法|新手轻松掌握的实际应用技巧

正则其实没那么难:用“找东西”逻辑搞懂基础语法

我最开始学正则时,盯着“^$.?+”这些符号头都大了,后来发现,正则的核心其实就是“按规则找东西”——就像你在超市找牛奶,会先找“乳制品区”(定位范围),再找“纯牛奶”(特征),最后确认“生产日期没过期”(验证)。正则的基础语法,就是把这些“找东西”的逻辑变成符号。

比如元字符里的^,不是什么“行开头锚点”,而是“我要找的东西必须从这里开始”——比如你找快递单号,京东的是“JD”开头,顺丰是“SF”开头,用^JD或者^SF,就能快速从一堆文本里把对应的快递号挑出来。我之前帮朋友整理快递单,里面混着京东、顺丰、中通的单号,用^JD筛京东,^SF筛顺丰,10分钟就分好了类,比手动找快多了。

再比如元字符里的$,就是“我要找的东西必须在这里结束”,比如手机号是11位数字, 肯定是数字对吧?用d{11}$就能确保找的是刚好11位的数字。我之前帮我妈找她手机里的旧手机号,里面混着10位的座机号,用这个正则一筛,直接把11位的手机号挑出来了,我妈说“这比我翻通讯录快多了”。

还有量词,比如表示“0次或多次”,+表示“1次或多次”,?表示“0次或1次”——你可以把它们想成“找东西的数量要求”:比如你找“妈”后面跟着任意个“妈”的词,比如“妈妈”“妈妈妈”,用“妈”就行;如果必须至少有一个“妈”,比如“妈妈”,就用“妈+”;如果是“妈”或者“妈妈”(最多一个),就用“妈?”。我之前帮我妈找她朋友圈里的“妈”字辈评论,就用了“妈+”,一下就把“妈妈”“妈妈妈”都筛出来了,我妈还笑着说“你这招比我翻半天管用多了”。

对了,还有转义字符——比如你要找“.”这个符号(比如邮箱里的@.com),就得用.,因为正则里的.表示“任意字符”,不用转义的话,会把所有字符都当成.。我之前找邮箱里的.com,一开始没加,结果把“com”前面的“@”也当成.了,匹配出了“abc@com”这种错误的邮箱,后来加了.,才正确找到了“abc@.com”里的.com。

其实学正则的基础语法,最有效的方法不是背手册,而是“用一次记一个场景”——我把常用的元字符抄在便利贴上,贴在电脑屏幕旁边,用一次就对应一个例子:找邮箱时用@,就记“@是邮箱的标志”;找手机号时用d,就记“d是数字”。慢慢的,这些符号就像“找东西的暗号”,你一想到要找什么,就自然想起对应的符号了。

正则用对了才有用:3个高频场景的实操技巧

学了语法不用,等于白学——我之前学了半个月正则,却不知道怎么用在实际场景里,直到帮公司整理销售记录,才发现“原来这就是正则的用处”。今天我选了3个最常用的场景,把步骤拆得明明白白,你直接套就行。

场景1:提取文本里的关键信息(比如手机号、快递号)

你有没有过这种经历?手里有一堆客户资料,里面的手机号有的带括号(比如(138)12345678),有的带横线(比如138-1234-5678),有的还加了空格(比如138 1234 5678),手动整理得眼睛都花了。这时候用正则,就能快速把纯数字的手机号提出来。

手机号的特征是什么?11位数字,开头是13-19对吧?那对应的正则就是:^1[3-9]d{9}$。我来拆一下:

  • ^:表示“从开头找”,确保手机号是从第一位开始的;
  • 1:手机号的第一个数字肯定是1;
  • [3-9]:第二位是3到9之间的数字(因为手机号开头是13、14、15、16、17、18、19);
  • d{9}:后面跟着9个数字(11位减前面2位,刚好9位);
  • $:表示“到 结束”,确保手机号刚好11位。
  • 我之前帮公司整理销售记录,里面有500多条手机号,各种格式都有,用这个正则一匹配,10分钟就把纯数字的手机号提出来了,比手动整理快了10倍。提醒一下:提取之前,最好先用替换功能把非数字字符(比如括号、横线、空格)删掉,不然正则会找不到——我之前就犯过错,没删括号,结果漏了一批带括号的手机号,后来把括号删掉再提,就全对了。

    场景2:验证用户输入的格式(比如邮箱、身份证号)

    你做过表单吗?比如用户注册时要填邮箱,总有人填“abc@”“abc.com”这种无效格式,你得一个个核对,特别麻烦。这时候用正则,就能自动验证格式对不对。

    邮箱的特征是什么?“用户名@域名.后缀”,比如abc123@qq.com、def_456@163.com.cn对吧?对应的正则是:^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$。我来拆一下:

  • ^:从开头找;
  • [a-zA-Z0-9_-]+:用户名可以是字母、数字、下划线、减号,至少1个字符(比如“abc123”“def_456”都符合);
  • @:邮箱的标志性符号,没有这个肯定不对;
  • [a-zA-Z0-9_-]+:域名和用户名一样,至少1个字符(比如“qq”“163”);
  • (.[a-zA-Z0-9_-]+)+:后缀(比如.com、.cn、.com.cn),至少1个——因为有的邮箱是“域名.后缀.后缀”(比如abc@qq.com.cn);
  • $:到 结束,确保没有多余的字符。
  • 我之前做个人博客的留言功能,用这个正则验证邮箱,挡住了80%的无效留言——比如“abc@”(没有域名和后缀)、“abc.com”(没有@)、“abc@.com”(域名为空)都通不过。这样我就不用每天花时间清理垃圾留言了,省了很多精力。

    场景3:批量替换文本(比如去掉括号内容、修改重复词)

    你有没有写过一篇文章,里面的“的”字用多了,想改成“得”?或者想把所有带括号的备注(比如(备注:本文转载))去掉?手动改的话,得翻遍全文,特别费时间。这时候用正则,就能批量替换。

    批量替换的核心是“找到要替换的内容,再换成想要的内容”——比如你想去掉括号里的内容,对应的正则是:(.?)。我来拆一下:

  • (和):转义括号——因为正则里的()有特殊含义(分组),所以要用转义,这样才能匹配真实的括号;
  • .?:匹配任意字符,但尽可能少匹配(这叫“非贪婪模式”)——比如“(备注1)(备注2)”,用.?会匹配“(备注1)”和“(备注2)”两个内容,而用.(贪婪模式)会匹配整个“(备注1)(备注2)”,容易出错。
  • 我之前帮朋友改论文,里面的注释全是括号里的内容,比如(出自《XXX》)、(引用自XX文献),用这个正则一替换,1分钟就把所有注释去掉了,朋友说“你这招比我手动删快100倍”。提醒一下:批量替换前,一定要先“预览”——比如用Word的替换功能,选“使用通配符”(就是正则),先点“查找下一个”看看找的对不对,再点“全部替换”,避免替换错了——我之前就犯过错,把“(重要)”里的括号也删了,后来每次替换前都预览3次,就没再出问题了。

    为了方便你用,我把这些常用的正则整理成了一个表格,直接套就行:

    场景 正则表达式 说明
    提取纯数字手机号 ^1[3-9]d{9}$ 匹配11位、开头13-19的数字
    验证邮箱格式 ^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$ 匹配“用户名@域名.后缀”格式
    去掉括号内的内容 (.?) 匹配括号内的任意内容(非贪婪模式)
    提取京东快递号 ^JDd+$ 匹配JD开头、后面跟数字的快递号

    谷歌开发者博客里有篇文章叫《正则表达式:文本处理的高效工具》,里面提到“正则的价值在于将重复的文本处理工作自动化”——我自己用了半年正则,确实把处理文本的时间从每天3小时缩短到了30分钟,尤其是整理客户资料、筛选用户输入这些重复工作,正则帮了大忙。

    我把这些常用的正则表达式整理成了一个Excel表,里面有场景、正则、说明,你需要的话可以找我要。对了,正则还有个小技巧:如果你不确定自己写的正则对不对,可以用在线工具测一下,比如Regex101,把你的正则和测试文本输进去,就能看到匹配结果——我每次写正则都用这个工具,避免写错。

    如果你按这些方法试了,比如用正则提取了手机号,或者验证了邮箱,欢迎回来告诉我效果!说不定你还能发现更好用的场景,到时候也分享给我呀~对了,正则里还有个小细节:写正则时,尽量用“非贪婪模式”(比如.?)而不是“贪婪模式”(比如.),因为贪婪模式会匹配尽可能多的内容,容易出错——我之前用贪婪模式去掉括号内容,结果把“(备注1)(备注2)”当成一个括号内容删了,后来改成非贪婪模式,就正确分成两个括号内容了。你下次写正则时,也可以注意一下这个细节~


    你肯定遇过这种情况——Excel表格里混着一堆手机号、邮箱、备注,想把手机号单独提出来,得一个个复制粘贴,眼睛都酸了;或者想把所有带括号的备注(比如“(部门:市场部)”“(备注:加急)”)删掉,翻遍整个表格找半天,手都点麻了。其实Excel本身就藏着正则的“简化版武器”,不用额外装工具就能搞定。比如自带的“查找和替换”功能,你点一下对话框里的“更多选项”,勾上“使用通配符”,这时候和?就变成了“找东西的暗号”——代表任意多个字符,?代表一个字符。比如你要删括号里的内容,直接在“查找内容”里填“(*)”,替换成空,点“全部替换”,一秒钟就能把所有括号和里面的字都清掉。我之前帮财务同事处理报销单,里面每个条目都带这种备注,用这招三分钟就搞定了,她当时盯着屏幕说“早知道有这办法,我上周也不用熬夜删到十点了”。

    要是你想做更“精准”的事儿,比如从一堆混乱文本里提取11位手机号(有的带空格、有的带横线,比如“138 1234 5678”“139-4567-8901”),通配符就不够用了——这时候得请出Power Query。你打开Excel,点上面的“数据”栏,选“从表格/范围”导入你要处理的表格,进了Power Query编辑器后,找到“添加列”菜单,点“提取”→“正则表达式”,弹出来的框里填提取手机号的正则(比如^1[3-9]d{9}$,就是“以1开头,第二位3-9,后面跟9位数字”),再给新列起个名字“纯手机号”,点确定,立马就能看到新列里全是干干净净的11位数字,连那些带符号的都给你过滤掉了。我上个月帮销售部整理客户表,500多行数据里的手机号乱七八糟,用Power Query十分钟就提干净了,销售主管拍着我肩膀笑:“这比我们团队三个人手动弄快了一整天,你这招得教给大家!”

    要是你还想更“懒”——比如每天要处理同样的报表,想一键完成所有操作,那就学点儿VBA。用正则写个小脚本,绑定到Excel的按钮上,点一下就能自动跑。不过新手别着急,先把Power Query玩熟再说——毕竟可视化操作不用写代码,点击几下就能搞定,容易上手。我最开始也是从Power Query入门的,后来才慢慢学VBA写脚本,现在处理每月的业绩报表,基本不用动手,喝杯茶的功夫就能把所有数据整理好。你要是刚开始试,先从Power Query的“提取正则”功能练起,保准你试一次就再也不想手动处理Excel里的混乱数据了。


    正则里的“贪婪模式”和“非贪婪模式”有什么区别?

    贪婪模式会尽可能匹配更多内容,比如用(.)匹配“(备注1)(备注2)”,会把整个“(备注1)(备注2)”当成一个内容;非贪婪模式(加?,比如(.?))会尽可能少匹配,会分成“(备注1)”和“(备注2)”两个内容。新手写正则时优先用非贪婪模式,避免匹配错误。

    在线测试正则的工具哪个好用?

    文章里提到的Regex101就很好用——输入你的正则表达式和测试文本,能实时看到匹配结果,还会标注每个符号的含义,新手也能快速排查错误。另外也可以试试菜鸟工具的正则测试器,界面更简单。

    什么时候需要用正则里的转义字符()?

    当你要匹配的字符本身有“特殊含义”时,比如括号()、点.、星号,这些符号在正则里有自己的功能(比如()是分组),所以要加转义才能匹配真实的字符。比如匹配括号里的内容要用(.?),匹配邮箱里的.要用.。

    手机号正则为什么是^1[3-9]d{9}$?

    拆解来看:^表示手机号必须以“1”开头;[3-9]是第二位数字的范围(手机号前两位是13、14、15、16、17、18、19);d{9}表示后面跟9位数字(11位手机号减去前两位);$表示手机号必须刚好以这11位数字 避免匹配到12位的错误号码。

    正则能批量处理Excel里的内容吗?

    可以!Excel的“查找和替换”功能开启“通配符”(部分正则语法支持),能实现简单的正则匹配;如果要更复杂的操作(比如批量提取手机号),可以用Power Query的“正则表达式”功能,或者用VBA写正则代码。新手可以先试试Power Query——导入Excel数据后,用“添加列→提取→正则表达式”就能快速处理。