java - 模式中限定词的使用

标签 java android regex

我对 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 次,这是允许的。

:?

Regular expression image

:*

Regular expression image

[看到他们有绕过的路线:]

:+

Regular expression image

:+ 的情况下,它只能尝试 1 次或更多次,这意味着它会尝试找到存在的 1 次 : 并且一旦找到它,它会消耗以下所有 : 如果它能找到它们。无法绕过 :

关于java - 模式中限定词的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16828554/

相关文章:

Android - SupportMapFragment with GoogleMaps API 2.0 给出 IllegalArgumentException

android - 对话框上的黑色操作按钮

java - 需要修改 MainActivity.java 的代码结构

python从字符串中删除电话号码

python - 如何找到所有大小可变的重叠匹配项?

regex - 修剪数据框中的部分字符串

java - GoogleCredential token 刷新如何工作?

java - 保护 Jersey RESTful Web 服务

java - 虽然 write() 中将 byteval 声明为整数,但为什么 Java I/O 流中只将低位八位写入文件

java - Firebase 在类上找不到要序列化的属性