正则表达式:标记化<打开> <苏格兰游戏> <油炸肝脏攻击> </fried-liver-attack> </scotch-game> </opening>

时间:2014-04-23 17:53:47

标签: java regex

如何使用正则表达式获取<opening><scotch-game><fried-liver-attack>字符串的单个标记。所以输出应该是3个字符串:

  1. 开口
  2. 的Scotch-游戏
  3. 炸 - 肝 - 攻击
  4. 编辑:

    这不是一个合适的xml

3 个答案:

答案 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);
}
}