特别是Java中的正则表达式

时间:2011-08-15 15:16:17

标签: java regex

我有一个文本字符串,如下所示:

word word word {{t:word word|word}} word word {{t:word|word}} word word...

我有兴趣提取所有以“{{t”开头并以“}}”开头的字符串。我不关心其余的事情。我事先并不知道“{{.. | ..}}”中的单词数量。如果它不是分隔内部单词的空格,那么在空间上分割文本就行了。我不确定如何编写正则表达式来完成这项工作。我考虑过运行文本,char by char,然后将所有内容存储在“{{t:”和“}}”之间,但是想知道更简洁的方法来做同样的事情。

谢谢!

修改 上述预期产出:

字符串数组String[] a,其中a[0]{{t:word word|word}}a[1]{{t:word|word}}

3 个答案:

答案 0 :(得分:3)

使用java.util.regex.*包在这里创造奇迹

Pattern p = Pattern.compile("\\{\\{t(.*?)\\}\\}");//escaping + capturing group
Matcher m = p.matcher(str);
Set<String> result = new HashSet<String>();//can also be a list or whatever
while(m.find()){
    result.add(m.group(1));
}

捕获组也可以是整个正则表达式,以包含{{}},因此"(\\{\\{t.*?\\}\\})"

答案 1 :(得分:3)

如何(使用非贪婪的匹配,以便它找不到“:word word | word}}单词{{t:word | word”

String s = "word word word {{t:word word|word}} word word {{t:word|word}} word word";
Pattern p = Pattern.compile("\\{\\{t:(.*?)\\}\\}");
Matcher m = p.matcher(s);
while (m.find()) {
    //System.out.println(m.group(1));
            System.out.println(m.group());
}

编辑:

更改为m.group(),以便结果包含分隔符。

答案 2 :(得分:0)

这对我有用:

import java.util.regex.*;

class WordTest {
    public static void main( String ... args ) {
        String input = "word word word {{t:word word|word}} word word {{t:word|word}} word word...";
        Pattern p = Pattern.compile("(\\{\\{.*?\\}\\})");
        Matcher m = p.matcher( input );
        while( m.find() ) {
            System.out.println( m.group(1) );
        }
    }
}