Js的$&如同 sed的& java的$0 指代matcher匹配到的内容的符号

2024-01-07 20:50:11

Js的$&如同 sed的& java的$0

在这里插入图片描述




$& 可用于Js,Vscode,RJTextEd,editplus,notepad++,

在 Vscode,RJTextEd,editplus,notepad++,等的替换中, 启用正则, 就能使 $&生效,
比如 ($&)表示给匹配到的内容加上括号

$& 可用于Js的String的replace(replaceAll( 的第二个字符串参数中

replace(replaceAll( 的第二个参数可以是字符串,也可以是函数

例子:给匹配到的内容加上括号
比如给字符串"abcdaabcdefgabcaabcdefg"中符合/aa/规则的内容加括号
以下代码等效

"abcdaabcdefgabcaabcdefg".replace(/aa/g , "($&)" );
"abcdaabcdefgabcaabcdefg".replaceAll(/aa/g , "($&)" );
"abcdaabcdefgabcaabcdefg".replaceAll("aa" , "($&)" );

也可以使用函数方式

replace(/aa/g , matcher=>"("+matcher+")");
replace(/aa/g , "($&)" );
replace(/aa/g , function(matcher){return "("+matcher+")";});
replaceAll(/aa/g , matcher=>"("+matcher+")");
replaceAll("aa" , matcher=>"("+matcher+")");
replaceAll(/aa/g , "($&)" );
replaceAll("aa" , "($&)" );
replaceAll(/aa/g , function(matcher){return "("+matcher+")";});
replaceAll("aa" , function(matcher){return "("+matcher+")";});




$0 可用于Java, Notepad3 等

$0 可用于Notepad3 等的正则替换

$0 可用于Java的String的 replaceAll方法 , Java的Matcher的replaceAll( , appendReplacement(

String的replaceAll方法源码

public String replaceAll(String regex, String replacement) {
    return Pattern.compile(regex).matcher(this).replaceAll(replacement);
}

Matcher的replaceAll方法源码

public String replaceAll(String replacement) {
    reset();
    boolean result = find();
    if (result) {
        StringBuilder sb = new StringBuilder();
        do {
            appendReplacement(sb, replacement);
            result = find();
        } while (result);
        appendTail(sb);
        return sb.toString();
    }
    return text.toString();
}

例子:给匹配到的内容加上括号
比如给字符串"abcdaabcdefgabcaabcdefg"中符合/aa/规则的内容加括号
以下代码 m1,m2,m3,m4方法等效

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class C2 {
	
	public static  void main(String...arguments) {
		
		m1(); m2(); m3(); m4();
		
	}
	
	static String str = "abcdaabcdefgabcaabcdefg";
	
	static void m1() {
		System.out.println(   str.replaceAll("aa", "($0)")   );
	}
	static void m2() {
		Matcher matcher = Pattern.compile("aa").matcher(str);
		System.out.println(   matcher.replaceAll("($0)")   );
	}
	static void m3() {
		Matcher matcher = Pattern.compile("aa").matcher(str);
		StringBuilder sb = new StringBuilder();
		while(matcher.find()) {
			matcher.appendReplacement(sb, "($0)");
		}
		matcher.appendTail(sb);
		System.out.println(sb);
	}
	static void m4() {
		Matcher matcher = Pattern.compile("aa").matcher(str);
		StringBuilder sb = new StringBuilder();
		while(matcher.find()) {
			String 本次匹配到的内容 = matcher.group();
			matcher.appendReplacement(sb, "("+本次匹配到的内容+")");
		}
		matcher.appendTail(sb);
		System.out.println(sb);
	}

}




& 可用于 sed 等

例子:给匹配到的内容加上括号
比如给字符串"abcdaabcdefgabcaabcdefg"中符合/aa/规则的内容加括号

echo "abcdaabcdefgabcaabcdefg" | sed 's/aa/(&)/g'
root@ud2310vm:~# echo "abcdaabcdefgabcaabcdefg" | sed 's/aa/(&)/g'
abcd(aa)bcdefgabc(aa)bcdefg
z@ud2310vm:~$ echo "abcdaabcdefgabcaabcdefg" | sed 's/aa/(&)/g'
abcd(aa)bcdefgabc(aa)bcdefg










文章来源:https://blog.csdn.net/kfepiza/article/details/135367118
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。