groupValues只返回重复模式的最后一次出现
println(Regex("(A|B)+").matchEntire("AB")!!.groupValues)
打印[AB, B]
但我希望结果是[AB, A, B]
。
- 这是行为吗?
- 有没有办法获得
[AB, A, B]
?
你得到的输出是预期的。 (A|B)+
匹配并捕获A
,将匹配值放入组1缓冲区,然后捕获B
(作为+
匹配一次或多次), 并将该值放入组1中, 重新写入 A
内部 。
所以,获得你所需要的唯一方法是同时捕获 A
或B
,但并不那么容易。
看到
println(Regex("(?:(A)|(B))+").matchEntire("AB")!!.groupValues)
请参阅Kotlin演示 。
它输出[AB, A, B]
,因为整个字符串与正则表达式匹配,值被添加为第一项,Capture 1被添加为第二项,Capture 2为第三项。
但是,如果你有一个更长的字符串,如123abc456def
并且你有(?:(\d+)|(\p{L}+))+
,你将失去所有的捕获, 所以,对于123abc456def
输入,你会得到[123abc456def, 456, def]
。
但是,您应该提供更多的细节,以防您需要匹配这样的字符串。