groupValues只返回重复模式的最后一次出现

println(Regex("(A|B)+").matchEntire("AB")!!.groupValues) 

打印[AB, B]但我希望结果是[AB, A, B]

  • 这是行为吗?
  • 有没有办法获得[AB, A, B]

你得到的输出是预期的。 (A|B)+匹配并捕获A ,将匹配值放入组1缓冲区,然后捕获B (作为+匹配一次或多次), 并将该值放入组1中, 重新写入 A内部

所以,获得你所需要的唯一方法是同时捕获 AB ,但并不那么容易。

看到

 println(Regex("(?:(A)|(B))+").matchEntire("AB")!!.groupValue‌s) 

请参阅Kotlin演示 。

它输出[AB, A, B] ,因为整个字符串与正则表达式匹配,值被添加为第一项,Capture 1被添加为第二项,Capture 2为第三项。

但是,如果你有一个更长的字符串,如123abc456def并且你有(?:(\d+)|(\p{L}+))+ ,你将失去所有的捕获, 所以,对于123abc456def输入,你会得到[123abc456def, 456, def]

但是,您应该提供更多的细节,以防您需要匹配这样的字符串。