提取字符串中出现的模式的多个实例?

时间:2013-08-09 23:03:10

标签: java regex

我有一个像下面这样的字符串:

String text = "This is awesome
               Wait what?
               [[Foo:f1 ]]
               [[Foo:f2]]
               [[Foo:f3]]
               Some texty text
               [[Foo:f4]]

现在,我正在尝试编写一个函数:

public String[] getFields(String text, String field){
// do somethng
 }
如果我使用field =" Foo"

传递此文本,

enter code here应返回[f1,f2,f3,f4]

我如何干净利落地做到这一点?

1 个答案:

答案 0 :(得分:4)

使用模式:

Pattern.compile("\\[\\[" + field + ":\\s*([\\w\\s]+?)\\s*\\]\\]");

并获取第一个捕获组的值。


String text = "This is awesome Wait what? [[Foo:f1]] [[Foo:f2]]"
        + " [[Foo:f3]] Some texty text [[Foo:f4]]";

String field = "Foo";

Matcher m = Pattern.compile(
        "\\[\\[" + field + ":\\s*([\\w\\s]+?)\\s*\\]\\]").matcher(text);

while (m.find())
    System.out.println(m.group(1));
f1
f2
f3
f4

您可以将所有匹配项放在List<String>中并将其转换为数组。