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

时间:2017-06-22 12:33:44

标签: regex kotlin

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

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

  • 预期会出现这种情况吗?
  • 有没有办法获得[AB, A, B]

1 个答案:

答案 0 :(得分:2)

您获得的输出是预期的。 (A|B)+匹配并捕获A,将匹配值放入第1组缓冲区,然后捕获B(因为+匹配一次或多次)并且放置价值进入第1组重写 A内部

因此,获得所需内容的唯一方法是捕获 AB,但这并不容易。

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

请参阅Kotlin demo

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

但是,如果你有一个更长的字符串,例如123abc456def而你有(?:(\d+)|(\p{L}+))+,那么就是will lose all the captures but last。因此,对于123abc456def输入,您将获得[123abc456def, 456, def]

但是,如果需要匹配此类字符串,则应提供更多详细信息。