3

我对 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),"::::::::"

谁能告诉我到底发生了什么?先感谢您!

4

1 回答 1

5

?and*运算符在其功能中也有零出现部分,当第一个字符不匹配时,它们将停在那里,因为它们匹配0时间,这是允许的。

:?

正则表达式图片

:*

正则表达式图片

[看到他们有绕过的路线:]

:+

正则表达式图片

:+它只能尝试 1 次或更多的情况下,这意味着它会尝试找到这个存在的 1 次出现,:并且一旦它拥有它,:如果它可以找到它们,它将消耗以下所有内容。没有绕过的路线:

于 2013-05-30T05:34:22.673 回答