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

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

最佳答案

?*运算符在功能上也具有零出现部分,并且当第一个字符不匹配时,由于匹配0时间,它们将在那里停止。

:?
:*

[请参阅他们有一条绕过:的路线]
:+

:+的情况下,它只能尝试1个或多个,这意味着它会尝试查找:的这个存在的1次事件,一旦找到它,如果可以找到,则会消耗所有以下:。没有办法绕过:

09-27 00:24