我对 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 次 :
并且一旦找到它,它会消耗以下所有 :
如果它能找到它们。无法绕过 :
。
关于java - 模式中限定词的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16828554/