换行后匹配字符串

时间:2014-03-14 23:15:48

标签: java regex newline

在Java中我有这个字符串:

uk\learningAid\UserInputs\UserClass.java:16: error: cannot find symbol
player.mvRight(3);

我目前正在使用此正则表达式来匹配16cannot find symbol

Pattern pattern = Pattern.compile(":(\\d+):\\serror:\\s(.*)");

但是,我还希望匹配新行上的player.mvRight(3);。我该怎么做?

我尝试在reex的末尾添加此\\n(.*),但无法匹配任何内容。

2 个答案:

答案 0 :(得分:0)

匹配包括新行到第一个&#34 ;;"。

Pattern pattern = Pattern.compile(":(\\d)+:\\serror:\\s(.*)\\n(.*);");

答案 1 :(得分:0)

根据您的评论,如果它不一定需要是正则表达式,则String方法(例如substring()indexof())可用于获取某些字符的位置和将它们用作具有特定模式的任何字符串的标记。以下SSCCE应适用于您的String和任何类似格式。

public  class Test {

    public static void main(String[] args) {
        String toProcess = "uk\\learningAid\\UserInputs\\UserClass.java:16: error: cannot find symbol \nplayer.mvRight(3);";
        int firstCol = toProcess.indexOf(":");
        int secondCol = toProcess.indexOf(":", firstCol+1);
        int lastCol = toProcess.lastIndexOf(":");
        System.out.println(toProcess.substring(firstCol+1, secondCol) + toProcess.substring(lastCol+1));
    }
}

输出:

16 cannot find symbol 
player.mvRight(3);

此外,如果您希望删除换行符,则只需在开头调用toProcess = toProcess.replaceAll("\n", "");即可删除换行符。