正则表达式中的$1、$2在替换操作中的使用

本文详细介绍了正则表达式中分组符号()的使用,特别是$1、$2等变量在替换操作中的关键作用,通过实例演示了如何在Java、JavaScript等编程语言中应用这些概念,从markdown转html链接的案例出发,揭示了它们在处理字符串匹配和转换中的强大功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

$1$2表达的是正则表达式中小括号(即分组)中的内容,$1是第一个小括号(分组)中的匹配结果,$2是第二个小括号(分组)中的匹配结果,以此类推。通常$1$2用在替换操作中。如下:

在这里插入图片描述其中文本是123-456-789,而正则表达式是(\d+)-(\d+)-(\d+),可以看到正则表达式中有3对小括号(即分组),第一个分组匹配的是123,第二个分组匹配的是456,第三个分组匹配的是789,而在替换区中的$3-$1-$2中的$1就是第一个分组中的内容123$2是第二个分组中内容456$3是第三个分组内容789,能够直接引用分组中的内容,所以能够替换成功。

再看一个例子,将markdown格式的超链接替换成html格式的超链接,如下:

在这里插入图片描述$1$2是用在替换操作中,在实现了正则表达式的编程语言中都可以使用。例如Java:

第一个例子的代码:

public class Demo {
    public static void main(String[] args) {
        String regex = "(\\d+)-(\\d+)-(\\d+)";
        String str = "123-456-789";
        Matcher matcher = Pattern.compile(regex).matcher(str);
        String replaceResult = matcher.replaceAll("$3-$1-$2");
        System.out.println(replaceResult);// 789-123-456
    }
}

第二个例子的代码:

public class Demo {
    public static void main(String[] args) {
        String regex = "\\[(.*?)\\]\\((.*?)\\)";
        String str = "百度的超链接是:[百度](http://www.baidu.com),这是markdown格式的文本。";
        Matcher matcher = Pattern.compile(regex).matcher(str);
        String replaceResult = matcher.replaceAll("<a href=\"$2\">$1</a>");// 替换的匹配到的文本
        System.out.println(replaceResult);// 百度的超链接是:<a href="http://www.baidu.com">百度</a>,这是markdown格式的文本。
    }
}

例如JavaScript:

第一个例子的代码:

var regex = /(\d+)-(\d+)-(\d+)/g;
var str = "123-456-789";
var result = str.replace(regex, "$3-$1-$2");
console.log(result);// 789-123-456

第二个例子的代码:

var regex = /\[(.*?)\]\((.*?)\)/g;
var str = "百度的超链接是:[百度](http://www.baidu.com),这是markdown格式的文本。";
var result = str.replace(regex, '<a href="$2">$1</a>');
console.log(result);// 百度的超链接是:<a href="http://www.baidu.com">百度</a>,这是markdown格式的文本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值