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

Posted 二木成林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式中的$1$2在替换操作中的使用相关的知识,希望对你有一定的参考价值。

$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格式的文本。

以上是关于正则表达式中的$1$2在替换操作中的使用的主要内容,如果未能解决你的问题,请参考以下文章

java 字符串替换

正则表达式 [REGEX] - 替换/替换 - 捕获组 1 和 2 中的内容

替换字符串中的重叠匹配项(正则表达式或字符串操作)

正则表达式替换markdown文件代码块标记中的所有空格

正则表达式中的插入操作

使用正则表达式c#替换文档中的文本字段