2

私はJavaを使用しています。正規表現を使用して次の行を解析する必要があります:

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

それは私にトークン、、、を与える<action>はず<action>ですX<game>

どのような正規表現が機能しますか?

私は次のようにsthを試していました:"<[a-zA-Z]>"しかし、それはまたはの世話をしませXalpha

4

4 に答える 4

5

あなたはこのようなことを試すことができます:

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());
}
于 2013-03-07T06:18:32.087 に答える
1

次のようなものが必要です。

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

アルファを返すかどうかを指定していません。この場合、アルファは返されません。

|\\w*私が書いた正規表現の最後に追加することで、アルファを返すことができます。

これは戻ります:

<action><action>X<game>
于 2013-03-07T06:16:04.727 に答える
0

元のパターンから、文字通りパターンに<>があるかどうかは明確ではありませんが、その仮定を使用します。

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

Javaコードの場合、パターンとマッチャーを使用できます。基本的な考え方は次のとおりです。

   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..
   }
于 2013-03-07T06:08:23.370 に答える
0

次のJava正規表現を使用できます。

Pattern pattern = Pattern.compile
       ("::=(<[^>]+>)(<[^>]+>)\\|([^|]+)\\|(<[^>]+>)\\|(\\w+)$");
于 2013-03-07T06:20:52.763 に答える