Java 正则表达式 Matcher.end() 未返回所需的索引

标签 java regex

我是 Java 正则表达式的新手,想要编写一个正则表达式来匹配特定模式并在匹配后立即获取下一个索引。我编写了以下代码:

temp = "contains(text(),\"something\")]"
String pattern = "^contains\\(text\\(\\),\"(.*)\"\\)";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(temp);
if(m.find())
{   
    value = m.group(0);
    type = CONTAINS;
    pointer = m.end();
    //System.out.println(m.group(1));
}

此后,指针超出范围。请注意,我提供的正则表达式模式以 ) 结尾,因此我希望指针的索引为 ] 但事实并非如此。我在这里缺少什么?

最佳答案

您可能错误地计算了您期望的 ] 位置。请记住,引号的转义 \ 不计算在内,因为它们在构建字符串时消失。

这里有一些东西可以证明它可以找到]

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Regex {

    public static void main(String[] args) throws Exception
    {

        String temp = "contains(text(),\"something\")]";
        String pattern = "^contains\\(text\\(\\),\"(.*)\"\\)";
        Pattern r = Pattern.compile(pattern);
        Matcher m = r.matcher(temp);
        if(m.find())
        {   
            String value = m.group(0);
            System.out.println(value+" <-- value"); //TODO remove debugging code
//            type = CONTAINS;  //<- no idea what this was for
            int pointer = m.end();
            System.out.println(pointer+" <-- pointer"); //TODO remove debugging code

            System.out.println(m.group(1)+" <-- m.group(1)");

            System.out.println(temp.substring(pointer, pointer+1)
                +" <-- temp.substring(pointer, pointer+1)"); //TODO remove debugging code
        }
    }
}

打印

contains(text(), "something") <-- value
28 <-- pointer
something <-- m.group(1)
] <-- temp.substring(pointer, pointer+1)

关于Java 正则表达式 Matcher.end() 未返回所需的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28977932/

相关文章:

java - 是否有可能有一个不适用于任何类、方法、字段等的Java注释。只是注释本身生成代码

java - 对象如何存储在堆中?

java - 在 Kotlin 中使用 Mockito 抛出异常

javascript - 简单的电子邮件正则表达式,确保用户包含点域?

python - 编写 Python RegEx 以选择 HTML 中列表项的子集

java - 线程的空指针异常

java - 将 UUID 和 User ID 设置到当前请求线程中

javascript - 更改 .match() 中的捕获组顺序

BigQuery 中的正则表达式

Swift - 正则表达式与组件/连接 : which is more efficient for String operations