Java正则表达式只匹配双方括号中的单词

时间:2011-07-15 10:41:05

标签: java regex

我正在尝试这样做: 我有这种文本(即文件):

[[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 个答案:

答案 0 :(得分:5)

您需要以下正则表达式:

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

然后转换为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]]

答案 1 :(得分:4)

您的正则表达式只需修改:\[\[(.*?)\]\]或此一个:\[\[([^\[\]]*)\]\]

因此结果句子在{No 1

组中

结果:

enter image description here

或者使用此正则表达式:(?<=\[\[)[^\[\]]*(?=\]\])具有前瞻和后瞻。

结果:

enter image description here

答案 2 :(得分:1)

您可以这样做:

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