Pattern中的限定符用法

Wei*_*ing 3 java regex android

我对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");
    }
}
Run Code Online (Sandbox Code Playgroud)

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

":","::::::::","::::::::";
Run Code Online (Sandbox Code Playgroud)

这是完全正确的我知道,但是:

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

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

结果是:

""(empty String),""(empty String),"::::::::"
Run Code Online (Sandbox Code Playgroud)

谁能告诉我地球上发生了什么?先感谢您!

Jer*_*rry 5

?*运营商也有零发生部分在它们的功能,当第一个字符不匹配,他们会停在那里,因为它们匹配0的时间,这是允许的.

:?
Run Code Online (Sandbox Code Playgroud)

正则表达图像

:*
Run Code Online (Sandbox Code Playgroud)

正则表达图像

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

:+
Run Code Online (Sandbox Code Playgroud)

正则表达图像

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