正则表达式在线测试与常用正则大全
实时语法高亮匹配、分组捕获提取,支持 g、i、m、s 标志位即时调试。内置元字符速查与 20+ 生产级高频正则表达式。
实时测试 · 纯本地即时匹配
开发者特惠 阿里云官方合作专区
阿里云爆款云服务器 · 开发者上云特惠 99元/年起
2核2G/2核4G 高性能轻量服务器、OSS 对象存储与云数据库限时特价,专属通道直达优惠。
//g
标志位效果速试:
匹配状态:2 处匹配
待匹配测试文本 (Test String):55 字符
实时匹配高亮预览:2 个匹配项
客服热线: 13800138000, 订单手机: 15912345678, 无效号码: 12345678901
匹配项列表与捕获组明细 (Matches & Capture Groups)
匹配 #1索引 [6 ~ 17]
"13800138000"
匹配 #2索引 [25 ~ 36]
"15912345678"
常用正则表达式大全 (点击一键填入测试)
点击任意卡片即可自动载入正则与示例数据正则表达式核心元字符与语法速查表
字符类、量词修饰、断言环视与边界匹配的标准语法。
元字符 (Character Classes)
\d / \D匹配数字 [0-9] / 非数字\w / \W单词字符 [a-zA-Z0-9_] / 非单词\s / \S空白字符 (空格/制表/换行) / 非空白. (点号)匹配除换行符以外的任意字符量词与贪婪性 (Quantifiers)
* / + / ?匹配 0+ / 1+ / 0或1 次{n} / {n,m}精确匹配 n 次 / n 到 m 次*? / +?惰性匹配 (非贪婪,取最少)^ / $ / \b行首 / 行尾 / 单词边界分组与环视断言 (Lookaround)
(...) / (?:...)捕获分组 / 非捕获分组(?=exp)正向前瞻:后面必须是 exp(?!exp)负向前瞻:后面不能是 exp(?<=exp)正向后顾:前面必须是 exp常见编程语言正则表达式代码速查
主流后端与前端语言中正则表达式的初始化、提取匹配与字符串替换。
Python (re)标准库
import re
# 查找所有匹配
res = re.findall(r"1[3-9]\d{9}", text)
# 分组替换
clean = re.sub(r"\s+", " ", text)JavaScript (ES6+)RegExp
// 校验真假
const isValid = /^1[3-9]\d{9}$/.test(phone);
// 提取所有匹配与捕获组
const matches = [...text.matchAll(/1[3-9]\d{9}/g)];Golang (regexp)标准库
import "regexp"
re := regexp.MustCompile(`1[3-9]\d{9}`)
// 查找所有结果
matches := re.FindAllString(text, -1)Java (Pattern & Matcher)java.util.regex
Pattern p = Pattern.compile("1[3-9]\\d{9}");
Matcher m = p.matcher(text);
while (m.find()) {
System.out.println(m.group());
}PHP (preg_*)PCRE
// 匹配全部
preg_match_all('/1[3-9]\d{9}/', $text, $matches);
// 正则替换
$res = preg_replace('/\s+/', ' ', $text);C# (.NET Regex)System.Text.RegularExpressions
var matches = Regex.Matches(text, @"1[3-9]\d{9}");
foreach (Match m in matches) {
Console.WriteLine(m.Value);
}正则表达式常见问题解答 (FAQ)
贪婪与惰性匹配差异、反斜杠转义原因及灾难性回溯防护。
Q1: 贪婪匹配与惰性匹配(非贪婪)有什么区别?
标准量词(如 *、+、{n,m})默认都是贪婪的 (Greedy),即在匹配成功的前提下尽可能吞掉最多的字符。例如针对文本 <div>hello</div>,表达式 <.*> 会匹配整个字符串。而在量词后面追加问号(如 .*?、+?)则会变成惰性匹配 (Lazy),一旦满足匹配条件即立刻停止扩展,因而 <.*?> 会精确分别匹配 <div> 和 </div>。
Q2: 为什么在 Java/C#/C++ 字符串中写正则需要双反斜杠 (\\)?
这是因为反斜杠 \ 在语言本身的字符串字面量中具有转义作用(例如 \n 表示换行符)。为了将一个真实的反斜杠字符传递给正则表达式引擎解析为 \d,字符串层面必须先写成 \\d。而在支持原生原始字符串(Raw String)的语言(如 Python r"\d"、Golang `\d`、C# @"\d")中则只需单个反斜杠。
Q3: 什么是正则表达式的“灾难性回溯 (Catastrophic Backtracking)”?
当正则表达式中存在嵌套的可选量词(如 (a+)+$ 或 ([a-zA-Z]+)*)且遇到不匹配的长字符串时,传统的 NFA 正则引擎会穷举尝试所有可能的分组组合,导致回溯次数呈指数级(\( O(2^n) \))爆炸增长,最终导致 CPU 飙升至 100% 并引发拒绝服务攻击(ReDoS)。防范方案包括避免嵌套量词、使用原子分组或引入执行超时限制。