java - 按长度获取可以重复的数字

标签 java regex

我对正则表达式有点菜鸟,但我找不到这个问题的答案(或者我没有做正确的研究)。

我有一堆数字,例如 17653133062491,我需要获取 1 - 9 之间的 5 个连续数字的组,但如果我执行 [1-9]{5} 之类的操作,则会得到 17653, 62491。我需要什么得到的是 17653, 76531, 65313, 53133, 62491。

有什么建议吗?

谢谢!

编辑记录:anubhava 的答案是正确的。但如果你尝试做这样的事情:

Pattern pattern = Pattern.compile("?=([1-9]{5})");

你会得到一个很好的异常(exception):

java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0

只需添加一个额外的括号即可获得组 1,如下所示:

Pattern pattern = Pattern.compile("(?=([1-9]{13}))");
Matcher matcher = pattern.matcher(data);        
while(matcher.find()) {
        String match = matcher.group(1);
        .....
}

最佳答案

您可以使用lookahead为此:

(?=([1-9]{5}))

RegEx Demo

您将获得此正则表达式的 5 个匹配项(如给定演示链接的匹配信息所示),因为前瞻是零宽度断言。

关于java - 按长度获取可以重复的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27848710/

相关文章:

java - 如何在java中使用jackson将json反序列化为枚举?

java - 正则表达式从 URL 中剪切文件名

python - 如何通过正则表达式清除某些字符?

php - 从 HTML 标签中移除 on* JS 事件属性

java - Struts2 中的动态文本域

java - Maven填充属性文件切换配置文件而不在类路径中添加文件

java - 链接列表 - 如何制作一个递归添加方法来添加 "sort "?

php - 正则表达式 - 排除字符串的否定前瞻

python - 确定任何正则表达式的输入类型

java - 反向地理编码获取街道名称Android