groupValues ​​solo devuelve la última aparición de patrón repetitivo

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

imprime [AB, B] pero esperaba que el resultado fuera [AB, A, B] .

  • ¿Se espera este comportamiento?
  • ¿Hay alguna forma de get [AB, A, B] ?

El resultado que se espera es esperado. (A|B)+ coincide y captura A , coloca el valor del partido en el buffer del Grupo 1 y luego captura B (como el + coincide una o más veces) y coloca el valor en el Grupo 1 reescribiendo el A interior .

Entonces, la única forma de get lo que necesita es capturar tanto A como B , pero no es tan fácil.

Ver

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

Vea la demostración de Kotlin .

Emite [AB, A, B] , ya que toda la cadena coincide con la expresión regular, el valor se agrega como el primer elemento, la captura 1 se agrega como el segundo elemento y la captura 2 es el tercer elemento.

Pero si tiene una cadena más larga como 123abc456def y tiene (?:(\d+)|(\p{L}+))+ , perderá todas las capturas pero durará . Entonces, para la input 123abc456def , obtendrá [123abc456def, 456, def] .

Sin embargo, debe proporcionar más detalles en caso de que necesite hacer coincidir dichas cadenas.

  • ¿Por qué no mira hacia adelante y mira detrás del trabajo de Regex en Kotlin?
  • Regex: un metacarácter para reconocer cualquier tipo de personaje
  • Kotlin Regex llamado grupos de apoyo
  • Regex no coincide en Kotlin