下面是一个在Java中产生异常(并且不匹配输入)的示例。也许我误解了JavaDoc,但它看起来应该有效。在C#中使用相同的模式和输入将产生匹配。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String pattern = "aspx\\?uid=([^']*)";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher("id='page.aspx?uid=123'");
System.out.println(m.groupCount() > 0 ? m.group(1) : "No Matches");
}
}
编辑:我应该注意JavaDoc对Matcher.groupCount的说明如下:
小于的任何非负整数 或等于此返回的值 方法保证是有效的 该匹配器的组索引。
答案 0 :(得分:3)
尝试拨打
m.find();
在.matcher
声明之后。
答案 1 :(得分:1)
它正在抛出异常,因为模式不匹配但你试图从中获取一个组(m.matches()
在这里会是假的); groupCount()
将返回匹配中的组数,无论是否存在匹配的组。至于为什么匹配不起作用,Java Patterns匹配整个字符串,而不是匹配子字符串