我对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次事件,一旦找到它,如果可以找到,则会消耗所有以下:
。没有办法绕过:
。