Estoy usando Java. Es necesario analizar la siguiente línea por medio de expresiones regulares (regex :

<actions>::=<action><action>|X|<game>|alpha

Debería darme tokens <action>, <action>,X y <game>

Qué tipo de regex funcionará?

Yo estaba tratando de sth como: "<[a-zA-Z]>" pero que no cuida de X o alpha.

  • Debe coincidir con alpha o no?
  • sí que debería también incluir alfa.
InformationsquelleAutor Dev | 2013-03-07

4 Comentarios

  1. 5

    Usted puede intentar algo como esto:

    String str="<actions>::=<action><action>|X|<game>|alpha";
    str=str.split("=")[1];
    Pattern pattern = Pattern.compile("<.*?>|\|.*?\|");
    Matcher matcher = pattern.matcher(str);
    while (matcher.find()) {
        System.out.println(matcher.group());
    }
    • esto incluye X con |X|. regex debe ignorar |
  2. 1

    Usted debe tener algo como esto:

    String input = "<actions>::=<action><action>|X|<game>|alpha";
    Matcher matcher = Pattern.compile("(<[^>]+>)(<[^>]+>)\|([^|]+)\|(<[^|]+>)").matcher(input);
    while (matcher.find()) {
         System.out.println(matcher.group().replaceAll("\|", ""));
    }

    No specefied si desea volver alfa o no, en este caso, no volver.

    Puede volver alfa mediante la adición de |\\w* a la final de la expresión regular que me escribió.

    Esto devolverá:

    <action><action>X<game>
    • el patrón no debe incluir el «|». este escupe:token:<acción> token:<acción> token:<acción> token:|X| token:<juego>
    • Una forma de eliminar el | es como yo lo hice en la edición del post.
    • ¿Puedes decirme cómo acortar este:<acciones>::=<acción><acción><acción>la acción. Aquí no hay «|» y que necesita para obtener fichas <acción>,<acción>,<acción> y la acción? Gracias.
    • en realidad he probado el patrón y no funciona.
  3. 0

    Del patrón original no está claro si te refieres a que, literalmente, hay <> en el patrón o no, yo me voy con esa suposición.

    String pattern="<actions>::=<(.*?)><(.+?)>\|(.+)\|<(.*?)\|alpha";

    Para el código java puede utilizar el Patrón y Comparador: aquí es la idea básica:

       Pattern p = Pattern.compile(pattern, Pattern.DOTALL|Pattern.MULTILINE);
       Matcher m = p.matcher(text);
       m.find();
       for (int g = 1; g <= m.groupCount(); g++) {
          //use your four groups here..
       }
    • espera, ¿por qué es alfa codificado aquí. Sí que debería incluir «<» y «>» y también palabras que no contienen estas «<» y «>» finales. En el ejemplo anterior, el símbolo debe ser <acción>, <acción>,X,<juego>,alfa.
  4. 0

    Puede utilizar el siguiente Java regex:

    Pattern pattern = Pattern.compile
           ("::=(<[^>]+>)(<[^>]+>)\|([^|]+)\|(<[^>]+>)\|(\w+)$");

Dejar respuesta

Please enter your comment!
Please enter your name here