gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:08:52 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com