【问题标题】:Java regex to match only words in double square bracketsJava 正则表达式仅匹配双方括号中的单词
【发布时间】:2011-07-15 10:41:05
【问题描述】:

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

[[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]] ");
...

提前致谢

【问题讨论】:

    标签: java regex


    【解决方案1】:

    您需要以下正则表达式:

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

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

    【讨论】:

    • Tim:鉴于他们发布的示例,我现在把它拿出来了。如果他们预计会有不同的意见,那么他们应该这么说。
    • 字符串模式Str = "\[\[[^\]]+\]\]";模式模式 = Pattern.compile(patternStr);匹配器 matcher = pattern.matcher(""); // 设置输入 matcher.reset("[[sdasd]] ddd [[ddsssss ssssss]] vvvddd [[dd]] asdasda [[asdsa]] "); boolean matchFound = matcher.find(); if (matchFound){ ... 只有第一个,groups.count = 0 ... :S
    • 谢谢!这正是我想要的。它在这里对我有用:regex101.com/r/gD8fV3/3
    【解决方案2】:

    您只是修改了正则表达式:\[\[(.*?)\]\] 或这个:\[\[([^\[\]]*)\]\]

    所以结果句在组号中1

    结果:

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

    结果:

    【讨论】:

    • 它什么都不匹配...我只需要获取方括号之间的句子...输入:[[dsdasð d d d]] asjdiajd [[ðð]] 输出:dsdasð d d d, ððð
    【解决方案3】:

    你可以这样做:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-06
      • 1970-01-01
      • 2014-10-22
      • 1970-01-01
      • 2015-04-20
      • 2010-09-22
      相关资源
      最近更新 更多