我对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 :(得分:5)
?
和*
运算符在其功能中也有零发生部分,当第一个字符不匹配时,它们将停在那里,因为它们匹配{ {1}}次,这是允许的。
0
:?
[看到他们有路由绕过:*
]
:
在:+
的情况下,它只能尝试1或更多,这意味着它会尝试找到:+
存在的1次出现,一旦有了它,就会消耗以下所有:
1}}如果能找到它们。没有路由绕过:
。