Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java regex Matcher.end()未返回所需索引_Java_Regex - Fatal编程技术网

Java regex Matcher.end()未返回所需索引

Java regex Matcher.end()未返回所需索引,java,regex,Java,Regex,我不熟悉Java中的正则表达式,希望编写一个正则表达式来匹配特定的模式,并在匹配后立即获得下一个索引。我编写了以下代码: temp = "contains(text(),\"something\")]" String pattern = "^contains\\(text\\(\\),\"(.*)\"\\)"; Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(temp); if(m.find()) { valu

我不熟悉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));
}

在此之后,指针超出范围。请注意,我提供的正则表达式模式在
处结束,因此我希望指针的索引为
]
,但事实并非如此。我在这里遗漏了什么?

您可能算错了您期望的
]
位置。请记住,引号的转义
\
s不起作用,因为它们在生成字符串时消失

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

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
        }
    }
}
import java.util.regex.Matcher;
导入java.util.regex.Pattern;
公共类正则表达式{
公共静态void main(字符串[]args)引发异常
{
字符串temp=“contains(text(),\“something\”)”;
字符串模式=“^包含\(文本\(\\),\”(.*)\“\)”;
Pattern r=Pattern.compile(Pattern);
匹配器m=r匹配器(温度);
if(m.find())
{   
字符串值=m.group(0);

System.out.println(value+“粘贴到此处时出现空格。我的实际代码中没有空格。无论如何,谢谢。@user3138572这是您需要的吗?是的。我想我是做错了什么。现在已解决。谢谢。
contains(text(), "something") <-- value
28 <-- pointer
something <-- m.group(1)
] <-- temp.substring(pointer, pointer+1)