温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java regex如何反向引用

发布时间:2026-10-04 22:34:18 来源:亿速云 阅读:94 作者:小樊 栏目:编程语言

在 Java 正则表达式(基于 java.util.regex)中,**反向引用(backreference)**用于在正则中“引用前面已经匹配到的分组内容”,语法是 \1、\2 …(在 Java 字符串里要写成 "\\1")。


一、基本语法

1️⃣ 分组

用 () 捕获分组:

(ab)
  • 第 1 个分组:\1
  • 第 2 个分组:\2

2️⃣ 反向引用

(ab)\1

含义:先匹配 ab,再匹配一次 ab

等价于:

abab

二、Java 中的写法(重点)

⚠️ 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+)

Java 7 开始支持 命名分组

定义命名分组

(?<word>\w+)

反向引用

\k<word>

Java 示例

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>)";

六、注意事项

❗ 反向引用只引用已捕获的内容,不是规则
❗ 分组编号按 ( 出现顺序
❗ 非捕获分组 (?:...) 不能反向引用


如果你有具体场景(比如解析日志、校验格式、提取内容),可以贴出来,我可以帮你写完整正则。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手