Java regex来匹配和检索一些令牌

Java regex来匹配和检索一些令牌,java,regex,Java,Regex,我感兴趣的字符串如下所示 a1.foo,a2.bar,a3.无论什么 现在我需要检索号码。 所以我写了这段代码(用Java),认为它可以工作,但事实并非如此。 有人能告诉我我的款式有什么问题吗 final String testInput = "a2.foo"; Pattern p = Pattern.compile("a(\\d*)\\.([^\\w])"); Matcher matcher = p.matcher(testInput); if (matcher.find()) { S

我感兴趣的字符串如下所示
a1.foo
a2.bar
a3.无论什么

现在我需要检索号码。 所以我写了这段代码(用Java),认为它可以工作,但事实并非如此。 有人能告诉我我的款式有什么问题吗

final String testInput = "a2.foo";
Pattern p = Pattern.compile("a(\\d*)\\.([^\\w])");
Matcher matcher = p.matcher(testInput);
if (matcher.find())
{
    System.out.println("n = " + matcher.group(1));
}
else 
{
    System.out.println("NOT MATCHED");
}

这将打印不匹配的
,而我希望它打印
2
您的正则表达式是错误的,因为
([^\\w])
将只匹配一个非单词字符。您可能需要多个单词字符,因此
(\\w+)

但是,您可以使用此前瞻:

Pattern.compile("a(\\d*)(?=\\.)");

但是我还想确定像
a2
(后面不跟点)这样的字符串是否不会匹配。
a2(后面不跟点)
不会跟lookahead匹配。@anubhava:太好了!这就解决了问题。谢谢@老实说,我不知道你在说什么。“什么与什么冲突?”我总以为你误读了。我说我也希望没有点的东西不会匹配。
\\([^\\w])
匹配一个
后跟一个非单词字符。你所有的例子后面都有一个单词字符,
是你的朋友。