在 Java 正则表达式(基于 java.util.regex)中,**反向引用(backreference)**用于在正则中“引用前面已经匹配到的分组内容”,语法是 \1、\2 …(在 Java 字符串里要写成 "\\1")。
用 () 捕获分组:
(ab)
\1\2(ab)\1
含义:先匹配 ab,再匹配一次 ab
等价于:
abab
⚠️ Java 字符串中 \ 需要转义
String regex = "(ab)\\1";
完整示例:
import java.util.regex.*;
public class Test {
public static void main(String[] args) {
String text = "abab";
String regex = "(ab)\\1";
System.out.println(text.matches(regex)); // true
}
}
String regex = "(\\d)(\\w)\\2\\1";
解释:
(\d) → 数字(\w) → 字母或数字\2 → 再出现一次第 2 组\1 → 再出现一次第 1 组匹配示例:
3a a3 ✅
"3aa3".matches("(\\d)(\\w)\\2\\1"); // true
Java 7 开始支持 命名分组
(?<word>\w+)
\k<word>
String regex = "(?<word>\\w+)\\s+\\k<word>";
"hello hello".matches(regex); // true
"hello world".matches(regex); // false
✅ 查找重复单词
(\w+)\s+\1
✅ 匹配成对括号
\(([^()]*)\)\1
✅ 校验密码(如不能包含用户名)
String regex = "(?<user>\\w+)\\w*(?!<user>)";
❗ 反向引用只引用已捕获的内容,不是规则
❗ 分组编号按 ( 出现顺序
❗ 非捕获分组 (?:...) 不能反向引用
如果你有具体场景(比如解析日志、校验格式、提取内容),可以贴出来,我可以帮你写完整正则。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。