Java регулярное выражение, чтобы соответствовать только слова в двойных квадратных скобках - PullRequest
3 голосов
/ 15 июля 2011

Я пытаюсь сделать это: у меня есть такой текст (то есть файл):

[[dadasd sadasd sdsd ad asddd]] [[dasdsd]] dsdsd [[dsdas]] ... [[dd ssas dd]]

Я хочу только предложения в двойных квадратных скобках.Как я могу решить это с Java?

//This one is not working:
    String patternStr = "(.*)\\[\\[(.*)\\]\\](.*)";
        Pattern pattern = Pattern.compile(patternStr);
        Matcher matcher = pattern.matcher("");

        // Set the input
        matcher.reset("[[sdasd]] ddd [[ddssssssssssss]] vvvddd [[dd]] asdasda [[asdsa]] ");
...

Заранее спасибо

Ответы [ 3 ]

5 голосов
/ 15 июля 2011

Требуется следующее регулярное выражение:

\[\[(.+?)\]\]

, которое затем переводится в строку Java как:

\\[\\[(.+?)\\]\\]

Тест PowerShell:

PS Home:\> [regex]::Matches("[[sdasd]] ddd [[ddssssssssssss]] vvvddd [[dd]] asdasda [[asdsa]] ", '\[\[(.+?)\]\]') | ft -auto

Groups                               Success Captures             Index Length Value
------                               ------- --------             ----- ------ -----
{[[sdasd]], sdasd}                      True {[[sdasd]]}              0      9 [[sdasd]]
{[[ddssssssssssss]], ddssssssssssss}    True {[[ddssssssssssss]]}    14     18 [[ddssssssssssss]]
{[[dd]], dd}                            True {[[dd]]}                40      6 [[dd]]
{[[asdsa]], asdsa}                      True {[[asdsa]]}             55      9 [[asdsa]]
4 голосов
/ 15 июля 2011

Вы регулярно изменяете регулярное выражение: \[\[(.*?)\]\] или это: \[\[([^\[\]]*)\]\]

Итак, итоговые предложения находятся в группе № 1

Результат:

enter image description here

Или используйте это регулярное выражение: (?<=\[\[)[^\[\]]*(?=\]\]) с предвкушением и предвидением.

Результат:

enter image description here

1 голос
/ 15 июля 2011

Вы можете сделать что-то вроде этого:

Pattern pattern = Pattern.compile("\\[+(.*?)\\]+");
Matcher matcher = pattern.matcher("[[sdasd]] ddd [[ddssssssssssss]] vvvddd [[dd]] asdasda [[asdsa]] ");
while(matcher.find()) {
    System.out.println(matcher.group(1));
}

Будет выведено:

sdasd
ddssssssssssss
dd
asdsa
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...