首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >regex:标记<打开><苏格兰-游戏><油炸-肝攻击>

regex:标记<打开><苏格兰-游戏><油炸-肝攻击>
EN

Stack Overflow用户
提问于 2014-04-23 17:53:46
回答 3查看 33关注 0票数 0

如何使用regex获取<opening><scotch-game><fried-liver-attack>字符串的各个标记。因此,输出应该是以下三个字符串:

  1. 打开
  2. 苏格兰游戏
  3. 炒肝

编辑:

这不是一个合适的xml。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-23 22:30:46

潘嘉,你想用雷吉斯做什么?这段代码可以做你想做的事。

代码语言:javascript
复制
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>>。那将是另一次讨论。

票数 1
EN

Stack Overflow用户

发布于 2014-04-23 17:56:48

这很简单。

代码语言:javascript
复制
    String str = "<opening><scotch-game><fried-liver-attack>";
    String[] tokens = str.substring(1, str.length() - 1).split("><");
票数 1
EN

Stack Overflow用户

发布于 2014-04-23 18:46:22

这可能会有帮助

代码语言:javascript
复制
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);
}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23251768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档