所有分类
  • 所有分类
  • 游戏源码
  • 网站源码
  • 单机游戏
  • 游戏素材
  • 搭建教程
  • 精品工具

最新正则表达式|常用正则大全|实用语法汇总

最新正则表达式|常用正则大全|实用语法汇总 一

文章目录CloseOpen

基础语法与核心元字符——从“看不懂”到“会运用”

正则表达式难在哪儿?很多人一看到^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$这种字符串就头大,觉得全是乱码。但你想啊,正则就像搭积木,每个“乱码”都是一块有特定功能的积木,拼对了就能搭出你想要的“房子”。我从一开始记不住元字符,到现在能随口说出常用表达式,其实就靠“理解用途+场景练习”这两招。

元字符家族:最常用的10个“语法积木”

先认识几个“老熟人”,这些元字符就像正则里的“偏旁部首”,几乎每个表达式都离不开它们。你不用死记硬背,跟着例子走一遍就懂了。

比如.(点),它就像个“万能替补”,能匹配除了换行符之外的任意一个字符。你想匹配“a后面跟任意字符再跟b”,写a.b就行,它能匹配“acb”“a1b”,甚至“a@b”。但如果你真的想匹配“a.b”这个字符串(中间是点),就得用.(反斜杠转义),写成a.b——这是新手最容易踩的坑,我第一次帮朋友匹配IP地址时,就忘了转义点,结果把“192.168.1.1”匹配成了“192x168y1z1”,闹了笑话。

再说说+这对“兄弟”,它们都是“量词”,表示“前面的内容重复几次”。是“0次或多次”,+是“1次或多次”。比如abcb表示b可以没有,也可以有多个,所以能匹配“ac”“abc”“abbc”;而ab+cb+要求b至少有一个,就只能匹配“abc”“abbc”,不能匹配“ac”。你看,就差一个符号,结果完全不同。MDN Web Docs的正则表达式指南里特别强调,量词的正确使用是正则效率的关键,你可以去看看(链接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressionsnofollow)。

还有[](字符集),用来圈定“允许出现的字符范围”。比如匹配手机号开头的“13-19”,可以写[3-9],这里-表示范围;如果想匹配“a或b或c”,就写[abc]。我之前帮同事过滤评论里的敏感词,就用[傻蠢笨]匹配这三个字,简单又高效。不过要注意,[]里的. 这些元字符会“失效”,变成普通字符,比如[a.]只匹配“a”“.”或“”,这点和外面不一样。

最后说()(分组)和1(反向引用),这俩是“高级玩家”工具。比如你想匹配重复的单词,像“好好”“天天”,可以写([u4e00-u9fa5])1()把第一个字分组,1引用这个分组,就能匹配两个相同的汉字。我上次帮朋友处理歌词文本,用这个正则找出了所有叠词,用来做歌词分析,他还以为我用了什么高级算法呢。

量词与边界:避免“过度匹配”的关键技巧

你有没有遇到过这种情况:写了个正则想匹配

内容

,结果把整个HTML文件都匹配进来了?这就是“贪婪匹配”在搞鬼。正则里的量词默认是“贪婪”的,会尽可能多匹配内容。比如a.b匹配“aabbaabb”,会从第一个a吃到最后一个b,结果是“aabbaabb”;如果在量词后加?,变成a.?b(非贪婪模式),就会匹配到第一个b,结果是“aabb”。

我之前帮公司处理日志文件,想提取[ERROR]后面的错误信息,一开始用[ERROR].,结果把后面几行的内容都包含进来了。后来改成[ERROR].?nn是换行符),只匹配到行尾,一下子清爽多了。所以遇到长文本匹配,记得试试非贪婪模式,可能会省很多事。

还有边界符^$,分别表示“字符串开头”和“字符串 ”。比如验证手机号,写1[3-9]d{9}可能会匹配到“abc13800138000def”里的手机号,加上^$变成^1[3-9]d{9}$,就只能匹配纯手机号,避免这种“半截匹配”。我帮朋友做用户注册表单时,就是因为忘了加^$,导致用户输入“13800138000abc”也能通过验证,后来被测试同学发现,还被笑了好几天。

b

(单词边界)也很好用,比如你想匹配“the”这个单词,写the可能会匹配到“there”里的“the”,用btheb就只会匹配独立的“the”。我整理文档时,经常用它替换特定单词,不用担心影响其他词。

高频场景常用正则表达式大全——拿来就能用的实战模板

光说理论太空泛,咱们直接上“成品”。下面这些正则是我从3年工作中 的高频场景,每个都标好了“适用场景+语法解析+实战案例”,你复制过去改改就能用。记得收藏这页,下次遇到文本处理问题,直接来翻就行。

验证类正则:从邮箱到身份证,一次搞定格式校验

不管是做注册表单还是数据清洗,格式验证都是高频需求。我整理了6个最常用的验证正则,每个都经过实际项目测试,你放心用。

应用场景 正则表达式 关键解析 常见错误
邮箱验证 ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$ 允许字母、数字、点、下划线等;域名需有“.”,顶级域名至少2位(如cn、com) 漏写^$导致匹配“user@example.com.cn123”;顶级域名限制过严(如只允许2位,排除.co.uk)
手机号(国内) ^1[3-9]d{9}$ 开头为1,第二位3-9(排除12/13以前的号段),后9位任意数字 写成1[3-8],漏掉19开头的新号段;加了空格或横杠的手机号匹配不到(需先预处理)
18位身份证号 ^d{6}(19|20)d{2}(0[1-9]|1[0-2])(0[1-9]|[12]d|3[01])d{3}[dXx]$ 6位地区码+4位年份(19/20开头)+2位月份(01-12)+2位日期(01-31)+3位顺序码+1位校验码(X/x) 日期校验不严(如2月30日也能通过);未处理X大小写(需转大写或加[xX])
URL地址 ^(https?|ftp)://[^s/$.?#].[^s]$ 支持http/https/ftp协议;域名不含空格,后面可跟路径参数等 漏掉ftp协议;允许空格导致匹配错误链接

实战案例

:去年帮朋友的电商网站做注册优化,他们之前用的邮箱正则太简单,导致“user@.com”这种无效邮箱都能注册,客服每天要处理一堆激活失败的投诉。我把上面的邮箱正则替换上去,再加了个“发送验证码前先验证格式”的逻辑,一周后无效注册量直接降了60%,客服同事终于不用天天加班了。

提取与替换类正则:批量处理文本的效率神器

比起验证,提取和替换才是正则的“重头戏”。比如从几百条日志里提取IP,把“2023年10月5日”统一成“2023-10-05”,用正则几分钟就能搞定,手动做可能要几小时。

先说URL提取,比如从一段文本里找出所有链接。正则可以用https?://[^s]+https?匹配http或https,[^s]+匹配非空格字符(链接里一般没空格)。我上次帮运营同学从公众号后台导出的留言里提取用户发的链接,用这个正则在Excel里“查找全部”,一下子就把500多条留言里的30多个链接挑出来了,她当时激动得请我喝奶茶。

日期格式统一

是另一个高频需求。比如有“2023-10-05”“10/05/2023”“2023年10月5日”三种格式,想统一成“YYYY-MM-DD”。可以分三步:先用(d{4})年/-月/-[日]?提取年月日(()分组),再用$1-$2-$3替换($1引用年分组,$2月,$3日)。这里要注意月份和日期可能是1位(如“5月”),替换后可能变成“2023-5-5”,如果需要两位数,可以用$1-$2$2-$3$3补零吗?不对,得用更复杂的处理,比如在替换时判断长度,不过Excel的替换功能支持简单的分组引用,复杂的可以用Python的re模块处理,这个后面再说。
特殊字符过滤也很常用,比如去除文本里的emoji、换行符或多余空格。去除emoji可以用[U00010000-U0010ffff](匹配所有emoji),我帮朋友整理小红书文案时,用这个正则批量去掉评论里的emoji,方便做词云分析。去除多余空格(比如多个空格变成一个)用s+替换成 (单个空格),这个几乎每天都能用得上。

应用场景 正则表达式 替换/提取示例
提取IP地址 b(?:d{1,3}.){3}d{1,3}b 从“登录IP:192.168.1.1,备用IP:10.0.0.1”提取“192.168.1.1”“10.0.0.1”
统一日期为YYYY-MM-DD (d{4})年/-月/-[日]? 替换为“$1-$2-$3”(需手动补零,或用代码处理)
去除emoji [U00010000-U0010ffff] “你好😊,今天天气真好☀️”→“你好,今天天气真好”

可验证

:不管是提取还是替换,写完正则一定要测试!推荐用Regex101(https://regex101.com/nofollow),左边输正则,右边输测试文本,下面


正则表达式这东西,你刚上手肯定觉得头大,我当初也是对着一长串符号发懵,觉得还不如手动改文本呢。但后来发现,真不用一上来就想把所有元字符都背下来——你想啊,学英语也不是先背完字典才开口说话的对吧?新手最该做的是“挑重点+场景代入”,先抓那几个天天见的元字符,比如.、*、+、[]、(),再找个你熟悉的场景往里套,一下子就好懂多了。

就拿手机号验证来说,你肯定见过1[3-9]d{9}这个正则吧?别看着像乱码,拆开看特简单:1是手机号开头肯定得是1;[3-9]是第二位,因为现在手机号没有12、13以前的号段了,所以3到9都行;后面d{9}就是9个数字,加起来正好11位。你看,每个部分都有它的道理,不是凭空写的。我当初就是先拿这个例子练手,试着改改规则——比如想让它匹配带区号的手机号(像+86 13800138000),就在前面加个+?86?s?,允许可选的+86和空格,改着改着就明白每个符号的作用了。

光看不行,得动手写,写了还得测。我现在电脑里常备Regex101这个工具,写正则的时候左边输表达式,右边贴段测试文本,下面立马告诉你哪匹配上了、哪错了。之前帮朋友改邮箱正则,他原来的表达式总把user.name@example.com这种带点的用户名判错,我在[]里加了个.,又在工具里试了试“user.name@test.com”“user-name@test.cn”这些例子,看匹配结果一点点对起来,特有成就感。你也别着急,每天花10分钟练一个小场景,比如今天拆手机号,明天拆邮箱,下周试试从日志里提IP,用得多了,那些元字符就像老朋友一样,看到就知道它要干嘛了。


正则表达式太难记,新手该从哪里开始学?

从“高频场景+基础元字符”入手,先掌握10个核心元字符(如.、、+、[]、()等)的实际用途,再结合具体场景练习。比如先学邮箱验证正则,拆解其中的@、.等符号作用,理解后尝试修改规则(如允许中文邮箱)。初期不用死记硬背,用得多了自然就熟练,推荐搭配Regex101等工具边写边测试,错误提示能帮你快速定位问题。

不同工具(如Python、Excel、VS Code)中的正则表达式用法有区别吗?

有差异,但核心语法一致。主要区别在“扩展功能”和“转义规则”:比如Python的re模块支持命名分组((?P…)),Excel的正则功能需通过VBA实现且不支持部分元字符(如b),VS Code的查找替换支持非贪婪匹配(.?)但需开启正则模式。使用前 先查对应工具的文档,比如Python可参考官方re模块手册(https://docs.python.org/3/library/re.htmlnofollow),避免因工具特性踩坑。

写好的正则表达式如何测试是否正确?

推荐3个实用工具:Regex101(在线可视化测试,支持多语言语法,能显示匹配过程和分组结果)、Sublime Text/VS Code的“查找”功能(开启正则模式后实时预览匹配效果)、Excel的“数据验证”(用正则做输入校验时,直接在单元格测试是否拦截错误格式)。测试时记得用“极端案例”,比如邮箱测试要包含“带点的用户名(user.name@xx.com)”“多级域名(user@mail.xx.co.uk)”等边缘情况。

元字符太多记不住,有什么记忆技巧吗?

用“场景联想”代替死记硬背:比如把.想象成“万能替补队员”(能替代除换行外的任意字符),和+是“数量管理员”(管0次以上,+管1次以上),[]是“限定范围卡”(只允许卡内字符通过),()是“打包机”(把内容打包成组方便引用)。也可以制作“元字符用途表”,贴在桌面,遇到问题时对照查用,两周左右就能形成条件反射。

处理中文文本时,正则表达式需要注意什么?

重点关注“字符编码”和“全角符号”:匹配汉字用[u4e00-u9fa5](覆盖基本汉字),若需包含生僻字可扩展为[u4e00-u9fff];全角字符(如全角逗号“,”、空格“ ”)和半角字符(如“,”“ ”)需区分,比如匹配全角空格用“ ”而非普通空格;中文标点符号(如“。?!”)在正则中无需转义,直接写入[]即可。 部分工具(如早期Excel版本)对中文正则支持较弱, 优先用Python或专业文本编辑器处理中文场景。

原文链接:https://www.mayiym.com/45338.html,转载请注明出处。
0
显示验证码
没有账号?注册  忘记密码?

社交账号快速登录

微信扫一扫关注
如已关注,请回复“登录”二字获取验证码