在 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 可用于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);
}
}
例子:给匹配到的内容加上括号
比如给字符串"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