如何在Pattern.compile()中转义管道字符

时间:2019-11-11 06:07:07

标签: java regex

当我使用Patter.comile()时,在转义符(|)时遇到问题。 我有代码:

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

class Scratch {

    static String finPatternWithPipe() {
        String text = "123|FirstName=First|SecondName=Second|567";
        Pattern pattern = Pattern.compile("FirstName=(.*)\\|");
        Matcher matcher = pattern.matcher(text);
        if (matcher.find()) {
            System.out.println(matcher.group(1));
        }
        return null;
    }

    public static void main(String[] args) {
        Scratch.finPatternWithPipe();
    }
}

并且想要接收结果“ 第一”,但实际结果是“ 第一| SecondName =第二”。 如果我更改代码而使用正则表达式“ FirstName =(。)\ | *”,请使用“ FirstName =(。)\ | S * ”因此结果应为我预期的“ 第一”。 我怎么了我想使用管道字符,就像我想在我的正则表达式字符串中看到的最后一个字符一样,但是不知道该怎么做。

1 个答案:

答案 0 :(得分:3)

您需要使量词不贪心:

Pattern.compile("FirstName=(.*?)\\|")
                              ^ add this

否则,.*尽可能匹配,其中包括管道字符。