Java Regex pattern.matcher理解

时间:2016-07-06 11:56:02

标签: java

考虑以下代码

import java.util.regex.*;

public static void main(String[] args) {
    String str = "Suneetha N.=9876543210, Pratish Patil=9898989898";
    Pattern pattern = Pattern.compile("(\\w+)(\\s\\w+)(=)(\\d{10})");
    Matcher matcher = pattern.matcher(str);
    String newStr = matcher.replaceAll("$4:$2,$1");
    System.out.println(newStr);
}

上述代码的输出是

Suneetha N.=9876543210, 9898989898: Patil,Pratish   

我无法理解matcher.replaceAll("$4:$3,$1")的用法及其工作原理并产生此输出。请提供您的建议。

1 个答案:

答案 0 :(得分:3)

你有

"(\\w+)(\\s\\w+)(=)(\\d{10})" 

正则表达式并想象它将为已创建的字符串创建一个GROUPS。在这个例子中它是

Pratish Patil=9898989898 

这里是regex的小组:

(\\w+) => Pratish        $1
(\\s\\w+) => Patil       $2
(=) => =                 $3
(\\d{10}) => 9898989898  $4

然后你说你希望通过这个新的排序replaceAll使用这个正则表达式,其中$ number定义了一个组。所以你要替换

Pratish Patil=9898989898 

来自:,的新群组订单。

$4:$2,$1 -> 9898989898:Patil,Pratish. 

您没有使用$ 3组,其中=