Pattern中的限定符用法

时间:2013-05-30 05:24:10

标签: java android regex

我对java模式中的限定符用法感到困惑: 第一段代码:

private void testRegex(String patternString) {
    Pattern pattern = Pattern.compile(patternString);
    Matcher matcher = pattern.matcher("::::::::");
        if (matcher.find()) {
            Log.d("regex", matcher.group());
        } else {
            Log.d("regex", "not match");
    }
}

然后我分别尝试testRegex(":?")testRegex(":*")testRegex(":+"); 结果是:

":","::::::::","::::::::";

我知道绝对正确,但是:

我在下面尝试另一段代码:

private void testRegex(String patternString) {
    Pattern pattern = Pattern.compile(patternString);
    Matcher matcher = pattern.matcher("sip::::::::");
        if (matcher.find()) {
            Log.d("regex", matcher.group());
        } else {
            Log.d("regex", "not match");
    }
}

结果是:

""(empty String),""(empty String),"::::::::"

谁能告诉我地球上发生了什么?提前谢谢!

1 个答案:

答案 0 :(得分:5)

?*运算符在其功能中也有零发生部分,当第一个字符不匹配时,它们将停在那里,因为它们匹配{ {1}}次,这是允许的。

0

Regular expression image

:?

Regular expression image

[看到他们有路由绕过:* ]

:

Regular expression image

:+ 的情况下,它只能尝试1或更多,这意味着它会尝试找到:+存在的1次出现,一旦有了它,就会消耗以下所有: 1}}如果能找到它们。没有路由绕过: