如何使用正则表达式获取<opening><scotch-game><fried-liver-attack>
字符串的单个标记。所以输出应该是3个字符串:
编辑:
这不是一个合适的xml
答案 0 :(得分:1)
非常简单。
String str = "<opening><scotch-game><fried-liver-attack>";
String[] tokens = str.substring(1, str.length() - 1).split("><");
答案 1 :(得分:1)
List<String> matchList = new ArrayList<String>();
try {
Pattern regex = Pattern.compile("<([^>]*?)>");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
matchList.add(regexMatcher.group(1));
}
} catch (PatternSyntaxException ex) {
// Syntax error in the regular expression
}
模式本身非常简单:<([^>]*?)>
我们匹配一个开头<
,然后括号懒洋洋地捕获到第1组任意数量的字符,这些字符不是[^>]*?
的结束括号。最后,我们匹配结束>
确保我们有一个完整的令牌。
Java代码只是构建一个包含所有Group 1捕获的列表,这就是您想要的。
请注意,这不会优雅地处理<nested <tokens>>
。那将是另一场讨论。
答案 2 :(得分:0)
这可能会有所帮助
public class PracticeOne
{
public static void main(String args[])
{
String s="<opening><scotch-game><fried-liver-attack>";
StringTokenizer st=new StringTokenizer(s,"<>");
ArrayList<String> al=new ArrayList<String>();
while(st.hasMoreElements())
{
String element=(String)st.nextElement();
if(!element.equals(""))
al.add(element);
}
System.out.println(al);
}
}