validar tester sintaxis regulares regular para nombres fecha expresiones expresion ejemplos clase regex string scala pattern-matching capturing-group

tester - Scala regex grupos de captura con nombre



scala string regex (2)

Me temo que los grupos nombrados de Scala no se definen de la misma manera. No es más que un alias de post-procesamiento para grupos sin nombre (es decir, solo numerados) en el patrón original.

Aquí hay un ejemplo:

import scala.util.matching.Regex object Main { def main(args: Array[String]) { val pattern = new Regex("""(/w*) (/w*)""", "firstName", "lastName"); val result = pattern.findFirstMatchIn("James Bond").get; println(result.group("lastName") + ", " + result.group("firstName")); } }

Esto imprime ( como se ve en ideone.com ):

Bond, James

Lo que sucede aquí es que en el constructor de Regex , proporcionamos los alias para los grupos 1, 2, etc. Luego podemos referirnos a estos grupos por esos nombres. Estos nombres no son intrínsecos en los patrones mismos.

En scala.util.matching.Regex rasgo MatchData veo que hay soporte para nombres de grupo, pensé que esto estaba relacionado con ( Regex Named Capturing Groups )

Pero como Java no admite nombres de grupo hasta la versión 7 como lo entiendo ( ref ), Scala versión 2.8.0 (Java HotSpot (TM) 64-Bit Server VM, Java 1.6. Me da esta excepción:

scala> val pattern = """(?<login>/w+) (?<id>/d+)""".r java.util.regex.PatternSyntaxException: Look-behind group does not have an obvio us maximum length near index 11 (?<login>/w+) (?<id>/d+) ^ at java.util.regex.Pattern.error(Pattern.java:1713) at java.util.regex.Pattern.group0(Pattern.java:2488) at java.util.regex.Pattern.sequence(Pattern.java:1806) at java.util.regex.Pattern.expr(Pattern.java:1752) at java.util.regex.Pattern.compile(Pattern.java:1460)

¿Entonces la pregunta es que los grupos de captura de nombres son compatibles con Scala? Si es así, ¿algún ejemplo por ahí?


Scala no tiene su propia imagen de coincidencia de expresiones regulares. En cambio, las expresiones regulares subyacentes son las de Java, por lo que los detalles de los patrones de escritura son los documentados en java.util.regex.Pattern.

Ahí encontrará que la sintaxis que está utilizando es en realidad la de la restricción de look-behind, aunque de acuerdo con los documentos, < debe ir seguido de = (look-behind positivo) o ! (look-behind negativo).