我正在尝试解析表单的行:
command arg1[ arg2, ... argn]
如:
usemtl weasels
要么
f 1/2/3 4/5/6 7/8/9
这是我的正则表达式:
^(\\w+)(( \\S+)+)$
解析“ usemtl weasels”行时,得到以下捕获组:
Match 0: 'usemtl weasels'
Match 1: 'usemtl'
Match 2: ' weasels'
为什么第二个比赛组之前有空格?它没有出现在Rubular中。
最佳答案
在Java正则表达式中进行分组有点奇怪。组0为您提供正则表达式的完全匹配-在我所知道的所有正则表达式实现中都是相同的。但是组n(对于n> = 1)将为您提供第n个已声明组的最后一个匹配项,而不是找到的第n个匹配项。
您的第二场比赛给您“ weasels”一个前导空格,因为您的模式包含该空格。您声明了第二组(( \\S+)+)
,并且该组为您提供了第二场比赛。
如果将模式应用于字符串a b c d
,则组0将为a b c d
,组1将为a
,组2将为b c d
,组3将为d
,因为这是最后一个您的第三个已声明(内部)组( \\S+)
的匹配项。