正则表达式$1,$2是什么意思


$1,$2表达的是小括号分组里面的内容:$1是第一个小括号里的内容,$2是第二个小括号里面的内容,依此类推。例如:

str = str.replaceAll("(\\d+)","\\*$1\\*");
// s1就表示正则表达式第一个括号内匹配到的内容。
// 如:  123      *123*

使用41相关正则可以减少代码量,如以下机试题:

描述

将一个字符中所有的整数前后加上符号“*”,其他字符保持不变。连续的数字视为一个整数。

注意:本题有多组样例输入。
import java.util.Scanner;
import java.util.regex.Pattern;
// 不使用$1
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextLine()) {
            String str = sc.nextLine();
            StringBuffer sb = new StringBuffer();
            if(str.matches("[0-9]{1,}")) {
                System.out.println("*" + str + "*");
            } else {
                String temp;
                for (int i = 0; i < str.length(); i++) {
                    temp = String.valueOf(str.charAt(i));
                    if(temp.matches("[0-9]")) {
                        if(i == 0 || String.valueOf(str.charAt(i-1)).matches("[^0-9]")) {
                            sb.append("*");
                        }
                        sb.append(temp);
                        if(i == str.length() - 1 || String.valueOf(str.charAt(i+1)).matches("[^0-9]")) {
                            sb.append("*");
                        }
                    } else {
                        sb.append(temp);
                    }
                }
                System.out.println(sb);
            }
        }
    }
}
import java.util.*;
// 使用$1
public class Main{
  public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
    while(sc.hasNext()){
      String str = sc.nextLine();
      str = str.replaceAll("(\\d+)","\\*$1\\*");
      System.out.println(str);
    }
  }
}