Java 仅在解析后才需要正则表达式结果整数

Java 仅在解析后才需要正则表达式结果整数,java,regex,Java,Regex,我想从一个字符串中提取正好5位的数字 如果我尝试 \d{5} 这适用于“12345”或“a12345a”,但它也匹配字符串“123456”中我不想要的“12345” 我可以试试 \d{5}\D 但是字符串“12345a”将在“a12345a”中匹配。有没有办法只拿到号码?(\d{5})[^a-zA-Z]是正确的方法 (\d{5})捕获的是5个数字,[^a-zA-Z]表示下一个字符不能是字母 编辑: 为清晰起见:\b(\d{5})\b用于当您想要有由边界(如',“之类的标记,当然还有空格)包围

我想从一个字符串中提取正好5位的数字

如果我尝试

\d{5}
这适用于
“12345”
“a12345a”
,但它也匹配字符串
“123456”
中我不想要的
“12345”

我可以试试

\d{5}\D
但是字符串
“12345a”
将在“a12345a”中匹配。有没有办法只拿到号码?

(\d{5})[^a-zA-Z]
是正确的方法

(\d{5})
捕获的是5个数字,
[^a-zA-Z]
表示下一个字符不能是字母

编辑:
为清晰起见:
\b(\d{5})\b
用于当您想要有由边界(如
',“
之类的标记,当然还有空格)包围的5位数字时。

要精确匹配5位数字,即使它被字母包围,也可以使用正则表达式

(?<!\d)\d{5}(?!\d)
(?
这与五个数字(
\d{5}
)相匹配,这些数字既不在前面(
(?),也不在后面(
(?!\d)

单词边界(
\b
)在这里不起作用,因为它们不允许
12345
a12345a
中匹配

请参阅上的演示


这匹配一个由五位数字和一个非数字字符组成的序列。

发布最后一位的正确方法是作为答案,而不是问题的一部分。你测试过你的正则表达式了吗?它似乎不匹配
12345d
…我没有足够的声誉!
^d
的意思是”字符串的开头,后跟字母
D
”。新版本应该可以做到这一点(或者我的另一个解决方案就是你的意思?)。此外,请注意[^a-zA-Z]甚至没有开始涵盖“字母”的定义“除非您将输入限制为7位ASCII码。否则您不会这样做,因为它仍然会得到123456码,而我只需要5个数字!如果您查看答案的第二部分,它会说在您需要5个数字时使用这种方式。第一部分是问题的确切答案,因此5个数字后面没有字母。(但我知道,在您的情况下,您需要第二部分;))如果5位数字位于字符串末尾,则第一个正则表达式将失败。
[^a-zA-Z]
表示必须有下一个字符(不能是字母).如果我不能断言怎么办?这是不可能的吗?@AlexChap:你是什么意思?我以为你的目的是断言在5位数的匹配之后没有字母或数字出现?哦,我以为你的意思是,只有在我“精神上”断言它才有效.无论如何,我的重点是数字后面可能会有一个字母..比如12345a,但a12345a和a12345以及“12345”只能得到相同的12345。我希望你能理解。然后你的问题是非常误导人的。你写了“得到一个不以字母结尾的5位数字”。我希望我现在明白你的意思。编辑我的答案。。。
/\d{5}[^\d]/