REGEX Matcher没有取代backslah

时间:2016-01-10 17:37:01

标签: java regex escaping backslash

Matcher中的函数appendReplacement(StringBuffer sb, String replacement)忽略带有双反斜杠的转义字符。我想将两行替换为由\ N分隔的一行。这是我的代码:

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



public class Test {

    public static void main(String[] args) {
        String str = "Lorem ipsum dolor sit amet,\n"
                + "consectetur adipiscing elit\n"
                + "\n"
                + "sed do eiusmod tempor incididunt ut\n"
                + "labore et dolore magna aliqua\n";
        StringBuffer sb = new StringBuffer();
        Pattern p = Pattern.compile("(.+)\n(.+)\n");
        Matcher m = p.matcher(str);
        while(m.find()) {
            String xyz = m.group(1) + "\\N" + m.group(2);
            System.out.println(xyz);
            m.appendReplacement(sb, xyz);
        }                    
        m.appendTail(sb);
        System.out.println("\n" + sb);
    }

}  

输出:

Lorem ipsum dolor sit amet,\ Nconsectetur adipiscing elit sed do eiusmod tempor incididunt ut \ Nlabore et dolore magna aliqua

Lorem ipsum dolor坐下来,Nconsectetur adipiscing elit sed do eiusmod tempor incididunt utNlabore et dolore magna aliqua

1 个答案:

答案 0 :(得分:0)

  

请注意,替换字符串中的反斜杠()和美元符号($)可能会导致结果与将其视为文字替换字符串时的结果不同。如上所述,美元符号可被视为对捕获的子序列的引用,反斜杠用于替换替换字符串中的文字字符。

您正在xyz String对象中插入\N。 append函数将替换backslashed字符替换为将其放在String文字中。因此,要通过追加函数获取\\\\N,您需要将其转义两次:{{1}}