我是 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/