你是否经常需要从大量文本中查找、替换特定的模式?或者想验证用户输入是否符合特定格式,比如邮箱地址或电话号码?如果答案是肯定的,那么正则表达式(Regular Expression,简称 Regex 或 Regexp)就是你一直在寻找的“瑞士军刀”!
一、什么是正则表达式? 🤔
简单来说,正则表达式就是用一系列特殊字符组成的字符串,来描述一种或多种字符串的模式。
你可以把它想象成一个高级的搜索过滤器。当你使用 Ctrl+F 查找某个单词时,你是在查找精确匹配。而正则表达式则允许你查找符合某种规则的文本。例如:
查找所有以“go”开头的单词。
查找所有包含数字的行。
查找所有有效的电子邮件地址格式。
二、为什么学习正则表达式? 💪
文本搜索与替换: 在代码编辑器、文本处理工具(如 Notepad++、VS Code)、命令行工具(如
grep、sed)中进行高级查找和替换。数据验证: 验证用户输入(如表单字段),确保数据格式正确。
数据提取: 从非结构化文本中提取特定信息。
编程: 几乎所有主流编程语言(JavaScript, Python, Java, Go, PHP, Ruby 等)都内置了对正则表达式的支持。
三、正则表达式基础语法 🧱
正则表达式由普通字符(字面量)和特殊字符(元字符)组成。
1. 字面量字符(Literal Characters)
大多数字符都按照字面意思匹配自身。
a,b,c匹配字母 'a', 'b', 'c'。1,2,3匹配数字 '1', '2', '3'。Hello匹配字符串 "Hello"。
2. 元字符(Metacharacters)
元字符赋予正则表达式特殊能力,它们不匹配自身,而是具有特殊含义。
四、常用特殊字符(预定义字符类) ✨
这些字符类是元字符的快捷方式,让你的正则表达式更简洁。
五、量词(Quantifiers)📏
量词决定了它前面的字符或组应该出现多少次。
六、锚点(Anchors)⚓
锚点不匹配任何字符,而是匹配字符串中的特定位置。
七、标志(Flags)🚩
标志是放在正则表达式斜杠 / 之外的字符,用于改变匹配行为。
八、实战演练:常见场景应用 🎯
现在,让我们通过一些实际例子来巩固所学知识。
1. 验证电子邮件地址
一个简单的邮箱验证(实际的邮箱格式非常复杂,这只是一个简化版):
代码段
^\w+([.-]?\w+)*@\w+([.-]?\w+)*(\.\w{2,3})+$
^: 字符串开头。\w+: 一个或多个单词字符(用户名部分)。([.-]?\w+)*: 可选的.或-后面跟单词字符,重复零次或多次(用户名中的点、杠)。@: 匹配@符号。\w+([.-]?\w+)*: 域名部分,与用户名类似。(\.\w{2,3})+: 匹配顶级域名,如.com,.cn等,至少两个最多三个字母,且至少出现一次。$: 字符串结尾。
2. 查找 HTML 标签
查找所有 <h1> 到 <h6> 标签:
代码段
<h[1-6]>.*?</h[1-6]>
<h[1-6]>: 匹配<h后跟一个 1 到 6 的数字,再跟>。.*?:.匹配任何字符,*匹配零次或多次,?使其非贪婪匹配(尽可能少地匹配),直到找到下一个模式。</h[1-6]>: 匹配对应的结束标签。
3. 提取数字
从字符串中提取所有连续的数字:
JavaScript
const text = "订单号:12345,金额:99.99元,电话:13812345678。";
const numbers = text.match(/\d+/g);
console.log(numbers); // 输出: ["12345", "99", "99", "13812345678"]
\d+: 匹配一个或多个数字。g: 全局匹配,找到所有符合的数字串。
用正则表达式解决字符串类型的算法题简直就是降维打击