如何在正则表达式中获取通配符的匹配部分?

时间:2011-10-30 03:36:09

标签: java regex

例如:

Pattern pattern = Pattern.compile("a(.*)b");
Matcher matcher = pattern.matcher("a19203b");
matcher.find();
System.out.println(matcher.group());

这会打印出整个字符串(a19203b)。我只需要19203。我怎样才能用Java获得它?

(例如,在mod_rewrite规则中,我会做类似RewriteRule article/(.*) article.php?id=$1的事情,其中​​$1是我需要的字符串)

2 个答案:

答案 0 :(得分:4)

找到解决方案。而不是matcher.group(),请使用matcher.group(1)

Pattern pattern = Pattern.compile("a(.*)b");
Matcher matcher = pattern.matcher("a19203b");
matcher.find();
System.out.println(matcher.group(1));

答案 1 :(得分:1)

使用lookbehinds / lookaheads:

Pattern regex = Pattern.compile("(?<=a).*(?=b)");

不捕捉您不想捕捉的内容。在这里你的整场比赛将是你想要的。