获取与String中的模式匹配的字符串数组

时间:2014-01-17 08:13:54

标签: java regex pattern-matching

我有一个很长的字符串让我们说

I like this #computer and I want to buy it from #XXXMall.

我知道正则表达式模式是

Pattern tagMatcher = Pattern.compile("[#]+[A-Za-z0-9-_]+\\b");

现在我想获取数组中的所有主题标签。我如何使用此表达式从字符串中获取所有哈希标记的数组,如

ArrayList hashtags = getArray(pattern, str)

5 个答案:

答案 0 :(得分:2)

你可以这样写吗?

private static List<String> getArray(Pattern tagMatcher, String str) {
    Matcher m = tagMatcher.matcher(str);
    List<String> l = new ArrayList<String>();
    while(m.find()) {
        String s = m.group(); //will give you "#computer"
        s = s.substring(1); // will give you just "computer"
        l.add(s);
    }
    return l;
}

此外,您可以使用\\w-代替A-Za-z0-9-_制作正则表达式[#]+[\\w]+\\b

答案 1 :(得分:0)

This link肯定有助于实现您的目标。

它说:

  

find()方法搜索正则表达式的出现次数   在文本中传递给Pattern.matcher(text)方法的时候   Matcher创建了。如果可以在文本中找到多个匹配项,则   find()方法将首先找到,然后为每个后续调用   找到()它将移动到下一场比赛。

     

方法start()和end()将索引放入文本中   找到的匹配开始和结束的地方。

示例:

String text    =
        "This is the text which is to be searched " +
        "for occurrences of the word 'is'.";

String patternString = "is";

Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(text);

int count = 0;
while(matcher.find()) {
    count++;
    System.out.println("found: " + count + " : "
            + matcher.start() + " - " + matcher.end());
}

你现在得到了提示。

答案 2 :(得分:0)

以下是使用Matcher

的一种方法
Pattern tagMatcher = Pattern.compile("#+[-\\w]+\\b");
Matcher m = tagMatcher.matcher(stringToMatch);

ArrayList<String> hashtags = new ArrayList<>();

while (m.find()) {
    hashtags.add(m.group());
}

我冒昧地简化你的正则表达式。 #不需要在字符类中。 [A-Za-z0-9_]\w相同,因此[A-Za-z0-9-_][-\w]相同

答案 3 :(得分:0)

您可以使用:

String val="I like this #computer and I want to buy it from #XXXMall.";
String REGEX = "(?<=#)[A-Za-z0-9-_]+";
List<String> list = new ArrayList<String>();
Pattern pattern = Pattern.compile(REGEX);
Matcher matcher = pattern.matcher(val);
while(matcher.find()){
    list.add(matcher.group());
}

(?<=#) 积极的外观 - 断言字符#确实匹配。

答案 4 :(得分:0)

您可以使用以下代码获取名称

    String saa = "#{akka}nikhil#{kumar}aaaaa";
    Pattern regex = Pattern.compile("#\\{(.*?)\\}");
    Matcher m = regex.matcher(saa);
    while(m.find()) {
        String s = m.group(1); 
        System.out.println(s);
    }

会打印

akka
kumar