java中的重复正则表达式模式

java中的重复正则表达式模式,java,regex,pattern-matching,repeat,Java,Regex,Pattern Matching,Repeat,我想读取一个包含以下内容的文本文件,我正在尝试使用regex将内容匹配并拆分为两个优先级队列的不同字符串,以创建基于堆的优先级队列任务调度器。但首先,我需要确保我使用扫描仪读取的文本文件的格式正确,首先是一个包含字母数字的任务,然后是一个非负整数(到达时间)和一个自然数(截止时间)。以下是文本文件中正确格式的输入: task1 2 3 task2 2 3 task3 2 3 task4 4 5 task5 4 5 task6 7 9 task7 7 9 task8 7 9 task9 7 9 t

我想读取一个包含以下内容的文本文件,我正在尝试使用regex将内容匹配并拆分为两个优先级队列的不同字符串,以创建基于堆的优先级队列任务调度器。但首先,我需要确保我使用扫描仪读取的文本文件的格式正确,首先是一个包含字母数字的任务,然后是一个非负整数(到达时间)和一个自然数(截止时间)。以下是文本文件中正确格式的输入:

task1 2 3 task2 2 3 task3 2 3 task4 4 5 task5 4 5
task6 7 9 task7 7 9 task8 7 9 task9 7 9
task10 7 9 task11 7 9 task12 7 9 task13 7 9
task14 7 9 task15 7 9 task16 10 11 task17 10 11
task18 10 11 task19 10 11  task20 10 12
我尝试使用下面的正则表达式代码来检查格式是否正确,但我只能将其与第一个任务属性匹配。除了第一个任务,我似乎无法匹配它,这意味着当它继续执行格式重复的其他任务时,正则表达式将失败。知道我的正则表达式怎么了吗

(^\s*[a-zA-Z0-9]*\s+\d+\s+\d+\s*){1,}
^
以任何空格开始
\s*
0次或更多次

[a-zA-Z0-0]*
是指任务的字母数字0或更多次

\s+
是不同任务属性之间的空白

\d+
是到达时间和截止时间

\s*
在不同任务之间以空格结束0次或更多次


{1,}
()
括号之后指定最小重复次数为1,没有指定最大重复次数

问题在于
^
要求匹配在输入序列的开始处,除了第一个匹配之外的任何匹配都不能满足该条件

尝试将第一部分移出组:

^\s*([a-zA-Z0-9]*\s+\d+\s+\d+\s*){1,}
顺便说一句,
{1,}
可以替换为单个
+

还要注意的是,根据您应用正则表达式的方式,您不需要使用
^
$
(例如
String.matches()
Matcher.matches
来包装表达式,或者您可能必须这样做(取决于您的需要),例如,在末尾添加一个
$
,要求在匹配后不允许任何内容(如果这会违反您的文件格式)

如果还想提取匹配项,则需要稍微不同的方法,即使用
Matcher.find()
并删除最后一部分(
{1,}