正则表达式核心知识点语法速查表
前言
正则表达式是处理字符串的强大工具,广泛应用于文本匹配、验证、提取和替换等场景。无论是开发、数据分析还是日常办公,掌握正则表达式都能大幅提升效率。以下是系统梳理的核心知识点:
一、基础概念与作用
- 定义:由普通字符(如字母、数字)和特殊字符(元字符)组成的字符串模式,用于描述字符串的规则。
- 核心作用:
- 验证字符串格式(如手机号、邮箱、身份证号)
- 从文本中提取特定信息(如 URL、日期、关键词)
- 批量替换或清理文本(如去除空格、统一格式)
- 应用场景:编程语言(JavaScript/Python/Java/Php 等)、文本编辑器(VS Code/Sublime)、数据库查询(SQL)等。
二、基础语法:元字符与规则
1. 匹配单个字符
| 元字符 | 含义 | 示例 |
| . | 匹配任意单个字符(除换行\n、回车\r) | a.b 匹配 aab、acb,不搭配ab |
| [] | 匹配括号内任意一个字符 | [abc] 匹配a、b或c |
| [^] | 匹配不在括号内的任意字符 | [^abc] 匹配搭配d、e等非 a/b/c 的字符 |
| \d | 匹配数字(等价于[0-9]) | \d{3} 匹配123、456等3位数字 |
| \D | 匹配非数字(等价于[^0-9]) | \D 匹配a、b等非数字字符 |
| \w | 匹配数字、字母、下划线(等价于[0-9a-zA-Z_]) | \w 匹配1、a、b2、c5_等 |
| \W | 匹配非数字、字母、下划线(等价于[^0-9a-zA-Z_]) | \W 匹配@、#、¥等 |
| \s | 匹配空白字符(含空格“ ”、换行\n、回车\r、制表符\t等) | a\sb 匹配"a b"、"a\nb"、"a\rb"等 |
| \S | 匹配非空白字符 | a\Sb 匹配"ab"、不匹配"a b" |
注意:如果需要匹配元字符本身(如 . 、 * 等),需要用到 \ 进行转义,例如 \. 匹配小数点、 \* 匹配星号。
2. 匹配数量:量词
用于指定字符或分组出现的次数
| 量词 | 含义 | 示例 |
| * | 匹配0次或多次(尽可能多,贪婪模式) | ab* 匹配a、ab、abb等 |
| + | 匹配1次或者多次 | ab* 匹配ab、abb等,不匹配a |
| ? | 匹配0次或者1次 | ab* 匹配a、ab |
| {n} | 精确匹配n次 | ab{2} 匹配abb |
| {n,} | 匹配至少n次 | ab{2,} 匹配abb,abbb等 |
| {n,m} | 匹配n到m次 包含(n和m) | ab{2,4}匹配abb、abbb、abbbb |
贪婪和非贪婪:默认是贪婪模式(尽可能多的匹配),在量词后面加问号 ? 切换成非贪婪模式(尽可能少的匹配),例如 a.*b 匹配 axxbxxb 中的 axxbxxb ,而 a.*?b 匹配 axxb
3. 位置匹配:边界与锚点
用于定位字符串的位置(不匹配具体字符)
| 元字符 | 含义 | 示例 |
| ^ | 匹配字符串开头(多行模式下匹配每行开头) | ^abc 匹配abcd 不匹配1abcd |
| $ | 匹配字符串结尾(多行模式下匹配每行结尾) | abc$ 匹配1abc 不匹配abcd |
| \b | 匹配单词边界(字母数字与非字母数字的交界处) | \bcat\b 匹配 cat、cat!,不匹配category |
| \B | 匹配非单词边界 | \Bcat\B 匹配category中cat,不匹配单独的cat |
4、分组与引用
| 名称 | 含义 | 示例 |
| 分组 | 用括号()将多个字符视为一个整体,可结合量词使用 | (ab)+ 匹配ab、abab,不匹配abb |
| 捕获分组 | 分组会默认编号(从1开始),可通过\n(正则中)和$n(替换时)引用 | (\d{4})-(\d{2})-(\d{2}) 匹配日期,替换为$3/$2/$1 可转为“日/月/年”格式 |
| 非捕获分组 | 用(?:)定义,仅分组不捕获(不分配编号,节省资源) | (?:\d{4})-(\d{2})-(\d{2}) 匹配日期,替换为$2/$1 可转为“日/月”格式,不捕获年份,所以$1代表了月份 |
| 分支条件 | 用符号 | 表示“或”关系,匹配多个模式中的一个 | abc|adc 匹配 abc 或 adc; a(b|d)c 匹配 abc 或 adc |
5、特殊模式:标志(修饰符)
用于调整正则的匹配规则
| 标志 | 含义 | 示例 |
| i | 忽略大小写 | abc/i 匹配abc、AbC |
| g | 全局匹配(找到所有匹配,而非第一个) | a/g 匹配aaab 中的所有a |
| m | 多行模式(^和$匹配每行的开头和结尾) | ^a/m 匹配 a\nabc中的2个a |
| s | 单行模式( . 就可以匹配换行符) | a.b/s 可以匹配a\nb,但a.b不可匹配 |
6、断言的类型
断言是正则表达式中用于指定匹配位置的元字符,它们不匹配任何实际字符,而是匹配字符之间的位置。简单来说,断言就是"条件",它要求目标字符串必须满足某些条件,但不会消耗字符。
| 类型 | 含义 | 示例 |
| 正向先行断言 | (?=pattern)匹配后面跟着 pattern 的位置 | /[a-z](?=\d)/ 匹配a1 中的a |
| 负向先行断言 | (?!pattern)匹配后面不跟着pattern的位置 | /[a-z](?!\d)/ 匹配ab中的a |
| 正向后行断言 | (?<=pattern)匹配前面跟着 pattern 的位置 | /(?<=\d)[a-z]/ 匹配1a中的a |
| 负向后行断言 | (?<!pattern)匹配前面不跟着pattern的位置 | /(?<!\d)[a-z]/ 匹配ab中的a |
7、常用的场景案例
| 案例 | 规则 | 正则 |
| 手机号 | 11 位数字,以 1 开头,第二位为 3/4/5/7/8 | ^1[34578]\d{9}$ |
| 邮箱 | 用户名 @域名(域名含。和字母 / 数字) | ^\w+([+-.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$ |
| 提取url中的域名 | 从 "https://www.example.com/path"提取"www.example.com" | https?://([^/]+)(通过分组捕获域名) |
| 匹配日期 | YYYY-MM-DD 格式 | ^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[0-1])$ |
总结
到此这篇关于正则表达式核心知识点语法速查表的文章就介绍到这了,更多相关正则表达式核语法速查内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
判断用户输入的银行卡号是否正确的方法(基于Luhn算法的格式校验)
下面小编就为大家带来一篇判断用户输入的银行卡号是否正确的方法(基于Luhn算法的格式校验)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-04-04


最新评论