‹ 正则测试
反馈与建议
当前工具:正则测试
没有邮件客户端?
⭐ 觉得好用?收藏备用,下次直接打开
元字符
. 任意字符(除换行)
\d 数字 [0-9]
\D 非数字
\w 单词字符 [a-zA-Z0-9_]
\W 非单词字符
\s 空白字符
\S 非空白字符
\b 单词边界
\B 非单词边界
量词
* 0 或多次(贪婪)
+ 1 或多次(贪婪)
? 0 或 1 次
{n} 恰好 n 次
{n,} 至少 n 次
{n,m} n 到 m 次
*? 0或多次(非贪婪)
+? 1或多次(非贪婪)
锚点 / 字符集
^ 行首
$ 行尾
[abc] a / b / c 之一
[^abc]排除 a / b / c
[a-z] a 到 z
[0-9] 0 到 9
分组与断言
(…) 捕获组
(?:…) 非捕获组
(?<n>…) 命名捕获组
(?=…) 正向先行断言
(?!…) 负向先行断言
(?<=…) 正向后行断言
(?<!…) 负向后行断言
(a|b) a 或 b
Python · re 模块
import re
# 用 r'' 避免转义,\d 直接写
pattern = r'your_pattern'
# 全局匹配(→ g)
re.findall(pattern, text)
# 标志位
re.findall(pattern, text,
re.I # → i 忽略大小写
| re.M # → m 多行
| re.S) # → s 点换行
# 首个匹配
m = re.search(pattern, text)
if m:
m.group() # 匹配值
m.start() # 起始位置
m.group(1) # 第1捕获组
# 替换
re.sub(pattern, 'new', text) ⚠ 命名组语法不同:(?P<name>…) 替代 (?<name>…)
Java · java.util.regex
import java.util.regex.*;
// \ 在字符串里写作 \\
Pattern p = Pattern.compile(
"your_pattern",
Pattern.CASE_INSENSITIVE // → i
| Pattern.MULTILINE // → m
| Pattern.DOTALL); // → s
Matcher m = p.matcher(text);
// 全局匹配(→ g)
while (m.find()) {
m.group(); // 匹配值
m.start(); // 起始位置
m.group(1); // 第1捕获组
m.group("name"); // 命名组
}
// 替换
m.replaceAll("new"); ⚠ 字符串中 \d 须写作 \\d,以此类推