私はJavaを使用しています。正規表現を使用して次の行を解析する必要があります:
<actions>::=<action><action>|X|<game>|alpha
それは私にトークン、、、を与える<action>
はず<action>
ですX
<game>
どのような正規表現が機能しますか?
私は次のようにsthを試していました:"<[a-zA-Z]>"
しかし、それはまたはの世話をしませX
んalpha
。
あなたはこのようなことを試すことができます:
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());
}
次のようなものが必要です。
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>
元のパターンから、文字通りパターンに<>があるかどうかは明確ではありませんが、その仮定を使用します。
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..
}
次のJava正規表現を使用できます。
Pattern pattern = Pattern.compile
("::=(<[^>]+>)(<[^>]+>)\\|([^|]+)\\|(<[^>]+>)\\|(\\w+)$");