我正在使用 Java。我需要使用 regex 解析以下行:
<actions>::=<action><action>|X|<game>|alpha
它应该给我标记<action>
, <action>
,X
和<game>
什么样的正则表达式会起作用?
我正在尝试类似的东西:"<[a-zA-Z]>"
但这并不关心X
or 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("\\|", ""));
}
您没有指定是否要返回alpha,在这种情况下,它不会返回它。
|\\w*
您可以通过添加到我写的正则表达式的末尾来返回 alpha 。
这将返回:
<action><action>X<game>
从原始模式来看,不清楚你的意思是否真的有 <> 在模式中,我会接受这个假设。
String pattern="<actions>::=<(.*?)><(.+?)>\|(.+)\|<(.*?)\|alpha";
对于 java 代码,您可以使用 Pattern 和 Matcher:这是基本思想:
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+)$");