当前位置: 首页 > 知识库问答 >
问题:

REGEX匹配器未替换backslah

邹书
2023-03-14

匹配器中的函数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 eusmod tempor incidunt ut\nlabore et dolore magna aliqua

Lorem ipsum dolor sit amet,Nconsectetur adipiscing elit do eusmod tempor incidunt utNlabore et dolore magna aliqua

共有1个答案

宗烨赫
2023-03-14

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

您正在\n中插入xyz字符串对象。append函数将用替换符替换反斜杠字符,就像将其放在字符串文本中一样。因此,要通过append函数获得\n,需要转义它两次:\\\n

 类似资料:
  • null 但问题是我的regex不是。

  • 这是一个简单的批处理文件,应该通过一个文件(PingList_Results.txt)运行,并拉出任何符合正则表达式(IPv4 Addy)的行,但它不起作用。我肯定这个问题很简单,但我不明白。谢谢! 示例PingList_结果。txt: ping 10.10。10.11包含32字节的数据:从10.10回复。10.11:字节=32时间=62ms TTL=54 Ping统计为10.10。10.11:数

  • 我试图解析这样的字符串; /^/^这是一个大/*这是一个粗体文本/-这是删除。我需要$/^和$之间的文本 在regexr和java regex tester上对regex进行了测试,并显示了它的工作状态。

  • 我只想替换字符串中的单词,如果单词字符或单词前后没有连字符。 文本: 替换后的预期结果: 正则表达式: < li >正则表达式当前仅匹配第一个匹配项(< code>#后的按钮)。我需要做什么来匹配所有事件? < li >如何在Java中将< code>button替换为< code>text或任何其他单词? 我读过主题我能在Java regex中替换组吗?,但是我真的不明白如何为我的特殊情况使用示

  • 我试图在一个字符串中选择多个匹配项,如下所示: 123 废话 结束 45 废话 结束 理想情况下,我希望它返回2个以数字序列开头和以END字符串结尾的匹配项。我使用以下内容: 但是,上述模式在一个匹配项中返回整个输入字符串。我有一种感觉,这与“单行”选项有关。我做错了什么?