Java正则表达式匹配器不匹配

时间:2018-03-02 15:58:34

标签: java regex

我无法理解为什么结果总是错误的

package test;

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

public class Test {

    public static void main(String args[]) { 
        String pattern = "place (//d+);(//d+);(//d+);(//d+)";

        // Create a Pattern object
        Pattern r = Pattern.compile(pattern);

        Matcher matcher1 = r.matcher("place 66;33;65;87");

        System.out.println(matcher1.matches());

    }

}

2 个答案:

答案 0 :(得分:1)

正则表达式和java字符串文字中的转义字符是反斜杠,而不是正斜杠。您希望在正则表达式中获得\d(转义d以获取 d igits。您必须通过字符串文字中的另一个反斜杠来转义它,因此您获得\\d

使用

"place (\\d+);(\\d+);(\\d+);(\\d+)"

匹配并且有效。

你当然可以把它运用起来并尝试编写一个正则表达式替换,用你的正则表达式中的//取代所有\ ......这样的事情:

String pattern = "place (//d+);(//d+);(//d+);(//d+)".replaceAll("//", "\\\\");

答案 1 :(得分:0)

这样可行:

public static void main(String args[]) {
        String pattern = "(place) (\\d+);(\\d+);(\\d+);(\\d+)";

        // Create a Pattern object
        Pattern r = Pattern.compile(pattern);

        Matcher matcher1 = r.matcher("place 66;33;65;87");

        System.out.println(matcher1.matches());
    }

你需要在圆括号和斜线中提供place