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

Java正则表达式仅匹配双方括号中的单词,java,regex,Java,Regex,我正在尝试这样做: 我有这种文本(即文件): [[dadasd sadasd sdsd ad asddd][[dasdsd]]dsd[[dsdas]]。。。[[dd ssas dd]] 我只想要两个方括号之间的句子。我如何用java解决这个问题 //This one is not working: String patternStr = "(.*)\\[\\[(.*)\\]\\](.*)"; Pattern pattern = Pattern.compile(patter

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

[[dadasd sadasd sdsd ad asddd][[dasdsd]]dsd[[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]] ");
...

提前感谢

您需要以下正则表达式:

\[\[(.+?)\]\]
然后将其转换为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组

结果:


或者使用此正则表达式:
(?您可以执行以下操作:

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

蒂姆:考虑到他们发布的示例,我现在把它拿出来了。如果他们预期不同的输入,那么他们应该这么说。String patternStr=“\[\[^\]+\]\]\]”Pattern Pattern=Pattern.compile(patternStr);Matcher Matcher=Pattern.Matcher(“”;//设置输入Matcher.reset(“[[sdasd]]ddd[[ddssss ssssss]]vvddddddd[[dd]]asdasda[[asdsa]]”;boolean matchfind=matcher.find();if(matchfind){…只有第一个,groups.count=0…:SThanks!这正是我要找的。它在这里对我有用:它什么都不匹配…我只需要得到双方括号之间的字符…输入:[[dsdasðd]]asjdiajd[[ððð]输出:dsdasðd,ðð