正则表达式教程从入门到精通:核心语法+场景应用,零基础也能轻松学会

admin 综合编程开发技术 2


是不是总觉得正则表达式像天书?看着别人用一串符号就能轻松验证手机号、提取文本,自己却连 “^” 和 “$” 都分不清;搜来的表达式复制粘贴能用,想改个规则就彻底乱套;遇到复杂文本处理,只能手动一点点抠,费时又费力?别担心,今天兔子哥就带大家从入门到精通学正则表达式,从核心语法讲到场景应用,哪怕你是零基础,跟着这套思路学,也能轻松掌握这门 “文本处理神器”,以后处理文字再也不用愁,一起往下看吧!
其实啊,正则表达式没那么玄乎,它就是一套 “文字规则语言”,用特殊符号告诉电脑 “你要找什么样的文字”。就像玩找茬游戏,你告诉朋友 “找红色的圆形图案”,朋友就按这个规则去找,正则表达式就是把这个规则写给电脑看而已。

一、先搞懂:正则表达式到底能帮你解决啥问题?


可能有朋友会问,学这玩意儿有啥实际用处?举几个例子你就明白了:
  • 注册账号时,检查用户输的手机号是不是 11 位数字,邮箱里有没有 @符号,这就得靠正则表达式把关;
  • 整理数据时,从几百行文本里一下子揪出所有网址、日期、身份证号,不用一个个复制粘贴;
  • 批量处理文档时,把 “2023-10-01” 统一改成 “2023 年 10 月 01 日”,或者给敏感词自动打码,效率翻倍。

网友小王分享:“之前处理公司客户资料,光手机号就有几百个,格式乱七八糟,用正则表达式一键提取加格式化,半小时就搞定了,之前手动弄起码得大半天!” 所以说,学会正则表达式,能省超多重复劳动的时间,这技能真得早点 get~

二、核心语法入门:这 6 个基础符号,是正则的 “地基”


学正则得从基础符号开始,就像盖房子先打地基,这些符号看似复杂,其实记几个常用的就行:

1. 普通字符:就是你看到的 “字面意思”


字母、数字、汉字这些 “正经” 字符,在正则里就代表它们自己。比如正则写 “abc”,就能匹配文本里的 “abc”,简单吧?不过要注意,标点符号和空格也算普通字符,但有些特殊符号(比如 “.”“*”)得转义才能当普通字符用,这个后面说。

2. 通配符 “.”:匹配任意一个字符(除了换行)


这个点可太好用了!它能代表任何一个字符,比如正则 “a.b”,能匹配 “a1b”“a@b”“a 好 b”,只要中间是一个字符就行。但要注意哦,它只能匹配 “一个” 字符,不能多也不能少,“ab” 或者 “a12b” 就匹配不上。

3. 边界符号 “^” 和 “$”:给匹配 “画个框”


  • “^” 表示 “开头”,比如正则 “^hello”,只能匹配以 “hello” 开头的文字,像 “hello world” 能匹配,“hi hello” 就不行;
  • ”,只能匹配以 “world” 结尾的文字,像 “hello world” 能匹配,“world hi” 就不行;
  • 两个一起用 “^hello$”,就只能匹配 “hello” 这一个词,多一个字少一个字都不行,常用于精确验证。

4. 字符类 “[]”:批量匹配一类字符


想匹配 “0-9 任意一个数字” 或者 “a-z 任意一个小写字母”,总不能一个个写吧?用 “[]” 就能批量指定:
  • “[0-9]”:匹配任意一个数字(0 到 9 都行);
  • “[a-z]”:匹配任意一个小写字母;
  • “[A-Z]”:匹配任意一个大写字母;
  • “[0-9a-zA-Z]”:匹配任意数字或字母,注册账号时验证用户名常用这个。

5. 量词 “*+?{}”:控制匹配次数


光有字符规则还不够,得告诉电脑 “要匹配几次”,这就是量词的作用,常用的有这几个:
  • ”:匹配 0 次或多次(可以没有,也可以有很多),比如 “a” 能匹配 “”“a”“aa”“aaa”;
  • “+”:匹配 1 次或多次(至少得有一次),比如 “a+” 能匹配 “a”“aa” 但不能匹配空;
  • “?”:匹配 0 次或 1 次(可有可无),比如 “a?” 能匹配 “” 或 “a”;
  • “{n}”:正好匹配 n 次,比如 “a {3}” 只能匹配 “aaa”;
  • “{n,}”:至少匹配 n 次,比如 “a {2,}” 能匹配 “aa”“aaa”“aaaa”。

6. 预定义类:偷懒专用的 “简写符号”


正则里有几个现成的 “缩写”,代替常用的字符类,记不住长规则的话,记这些简写更方便:
  • “\d”:等同于 “[0-9]”,匹配任意数字;
  • “\D”:等同于 “[^0-9]”,匹配任意非数字;
  • “\w”:等同于 “[0-9a-zA-Z_]”,匹配数字、字母或下划线;
  • “\s”:匹配空格、换行、制表符等空白字符。

比如想匹配 “3 个数字”,写 “\d {3}” 比 “[0-9]{3}” 简单多了,新手建议优先记这些简写。

三、场景应用实战:这 3 个高频场景,学会就能解决 80% 问题


光会语法不算会用,得结合实际场景练,这几个场景几乎天天能遇到:

1. 表单验证:手机号、邮箱格式把关


这是正则最常用的场景,比如验证手机号:
  • 规则:必须 11 位数字,开头是 1,第二位是 3-9(手机号规则);
  • 正则:“^1 [3-9]\d {9}$”;
  • 拆解:“^1” 确保开头是 1,“[3-9]” 限制第二位,“\d {9}” 匹配后面 9 位数字,“$” 确保总长度 11 位。

再比如验证邮箱:
  • 规则:用户名 @域名(比如 abc123@qq.com);
  • 正则:“^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+.[a-zA-Z0-9_-]+$”;
  • 拆解:“[a-zA-Z0-9_-]+” 匹配用户名(字母、数字、下划线、减号),“@” 是固定符号,后面匹配域名和后缀。

2. 文本提取:从大段文字里抓关键信息


比如从一段新闻里提取所有日期(格式 “2023-10-01”):
  • 正则:“\d {4}-\d {2}-\d {2}”;
  • 原理:“\d {4}” 匹配 4 位年份,“-” 是连接符,“\d {2}” 匹配月份和日期,用这个规则能一次性抓出所有符合格式的日期。

还有提取所有手机号:
  • 正则:“1 [3-9]\d {9}”;
  • 不用加 “^$”,因为是从大段文字里找,不是精确验证单个字符串。

3. 批量替换:统一修改文本格式


比如把文本里的 “2023-10-01” 改成 “2023 年 10 月 01 日”:
  • 正则:“(\d {4})-(\d {2})-(\d {2})”;
  • 替换成:“$1年$2 月 $3 日”;
  • 原理:用 “()” 分组,“$1”“$2”“$3” 分别代表年、月、日,这样就能批量转换格式,超方便!

四、进阶技巧:这些 “骚操作” 能让你效率翻倍


学会基础后,这几个技巧能帮你处理更复杂的问题:

1. 分组 “()”:把多个字符当一个整体


比如想匹配 “ababab” 这种重复的结构,正则可以写 “(ab)+”,“(ab)” 是一个组,“+” 表示这个组重复 1 次或多次,就能匹配 “ab”“abab”“ababab” 了。分组还能配合替换使用,就像上面日期转换的例子,超实用。

2. 转义符号 “\”:让特殊符号变 “普通”


正则里的 “.”“*”“()” 这些是特殊符号,想匹配它们本身就得加 “\” 转义。比如想匹配 “www.baidu.com” 里的点,正则得写 “www.baidu.com”,不然 “.” 会匹配任意字符,就会错配 “wwwxbaiducom” 这种文本。

3. 非贪婪匹配:避免 “匹配过头”


默认情况下,量词是 “贪婪” 的,会尽量多匹配。比如用 “a.b” 匹配 “a1b2b”,会匹配整个 “a1b2b”(从第一个 a 到最后一个 b)。如果想匹配到第一个 b 就停,加个 “?” 变成非贪婪:“a.?b”,这样就只会匹配 “a1b”,这个技巧在提取文本时超有用。

五、自问自答:新手常踩的坑,帮你提前避开


问:为啥我写的正则匹配结果总是多出来一截?


答:大概率是没控制好匹配范围!比如用 “a.b” 匹配 “a1b2b3”,贪婪匹配会抓到最后一个 b,导致结果过长。这时候加个非贪婪 “a.?b”,或者用更精确的规则(比如 “a [^b]*b”,“[^b]” 表示除了 b 之外的字符),就能避免匹配过头。

问:在不同工具里用同一个正则,结果不一样,咋回事?


答:这很正常!不同工具的正则 “方言” 不一样,比如有的工具支持 “\d”,有的老工具可能不支持;还有的区分大小写,有的默认不区分。用之前最好先在工具里测试一下,比如在线正则测试网站 “regex101” 就很方便。

问:记不住那么多符号咋办?


答:谁也记不住所有符号!兔子哥的办法是,把常用规则(比如手机号、邮箱正则)存在记事本里,遇到类似场景就改改复用,用多了自然就记住了。重点是理解规则逻辑,而不是死记硬背符号。

兔子哥的小建议


学正则表达式,千万别一开始就啃复杂规则,先把手机号、邮箱这些常用场景练熟,用一次就理解一次。推荐找个在线正则测试工具,边写边看效果,改改符号看看匹配结果怎么变,比光看书强 10 倍。
遇到复杂问题别慌,把大规则拆成小规则。比如验证身份证号,先匹配前 6 位地址码,再匹配 8 位出生日期,最后匹配 3 位顺序码和 1 位校验码,一步步拼起来,就没那么难了。
其实正则表达式就像学骑自行车,刚开始觉得难控制,练几次就顺手了。它的核心是 “规则思维”,只要你能说清楚 “要找什么样的文字”,就能把这个规则翻译成正则表达式。希望这篇教程能帮你打开正则的大门,以后处理文本效率翻倍,省下时间多摸鱼~

标签: 从入门到精通 正则表达式

发布评论 0条评论)

  • Refresh code

还木有评论哦,快来抢沙发吧~