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

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

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

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

One Solution collect form web for “groupValues只返回重复模式的最后一次出现”

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

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

看到

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

请参阅Kotlin演示 。

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

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

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

  • 测试包不读取主包中定义的Kotlin类
  • Kotlin Android打印到控制台
  • 是否有一个相当于Swift init Kotlin(重复:计数:)
  • 将java类文件转换为kotlin会导致编译错误
  • Kotlin通用对话框不显示
  • 在Kotlin注释不起作用
  • Kotlin中的Android应用程序不能正确地扩大片段布局
  • 我可以在没有`this`的情况下在自己的class级中应用中缀函数吗?
  • Android studio3.0 kotlin classNotFoundException
  • Kotlin属性与getter。 我可以不指定初始值吗?
  • Kotlin将TimeStamp转换为DateTime
  • Kotlin language will be the best programming language for Android.