Частное регулярное выражение в Java - PullRequest
2 голосов
/ 15 августа 2011

У меня есть текстовая строка, которая выглядит следующим образом:

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

Мне интересно извлечь все строки, которые начинаются с "{{t" и заканчиваются на "}}".Я не забочусь об остальном.Я не знаю заранее количество слов в "{{.. | ..}}".Если бы это не было пробелом, разделяющим слова внутри, тогда разделение текста на пробел бы сработало.Я не уверен, как написать регулярное выражение, чтобы сделать это.Я думал о том, чтобы пробежаться по тексту, char за char, а затем сохранить все между "{{t:" и "}}", но хотел бы найти более чистый способ сделать то же самое.

Спасибо!

РЕДАКТИРОВАТЬ Ожидаемый результат сверху:

Массив строк String[] a, где a[0] равно {{t:word word|word}} и a[1] это {{t:word|word}}.

Ответы [ 3 ]

3 голосов
/ 15 августа 2011

Как насчет (использовать не жадное сопоставление, чтобы оно не находило ": word word | 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 (), поэтому результаты содержат разделители.

3 голосов
/ 15 августа 2011

использование пакета 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.*?\\}\\})"

0 голосов
/ 15 августа 2011

Это сработало для меня:

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) );
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...