如何在Java正则表达式中获得美元符号

时间:2015-10-21 13:54:43

标签: java regex

我一直在寻找这个:https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

然而,我仍然难以编写正确的命令来获得以下模式的所有表达式:

 <$FB $TWTR are getting plummetted> 

(&lt;&gt;只是在解析推特时发出句子 - 推文的开头)。我想提取FB TWTR。

任何帮助都非常感激。

1 个答案:

答案 0 :(得分:1)

以下是两步法:我们使用正则表达式提取<...>个组,然后将这些块拆分为单词,看看它们是否以$开头。

String s = "<$FB $TWTR are getting plummetted>";
Pattern pattern = Pattern.compile("<([^>]+)>");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
    String[] chks = matcher.group(1).split(" ");
    for (int i = 0; i<chks.length; i++)
    {
        if (chks[i].startsWith("$"))
            System.out.println(chks[i].substring(1));
    }
} 

请参阅demo

这是一个1-regex方法(see demo),只有当你对正则表达式有信心时才使用:

String s = "<$FB $TWTR are getting plummetted>";
Pattern pattern = Pattern.compile("(?:<|(?!^)\\G)[^>]*?\\$([A-Z]+)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
    System.out.println(matcher.group(1)); 
} 

此处使用的正则表达式为(?:<|(?!^)\G)[^>]*?\$([A-Z]+)

匹配:

  • (?:<|(?!^)\G) - 文字<,然后在每次成功比赛结束时
  • [^>]*? - >以外的0个或更多字符(尽可能少)
  • \$ - 文字$
  • ([A-Z]+) - 匹配并捕获大写字母(替换为最适合您的目的,可能是\\w)。