【问题标题】:Java Regex pattern not matching bracketsJava 正则表达式模式不匹配括号
【发布时间】:2014-01-25 05:15:37
【问题描述】:

我目前正在尝试测试与以下匹配的正则表达式模式

[#123456]

[#aabc36]

我尝试过#[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3} 并成功匹配#aabc36,但是在添加括号 [] 时失败了。

我尝试了以下匹配模式

[#[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}]

下面是我的正则替换方法

 public String replaceColor(String text , String bbcode , String imageLocation ){

    //"\\[("+bbcode+")\\]" for [369] , [sosad] 

    // String imageLocation = "file:///android_asset/smileyguy.png";
    // builder.append("<img src=\"" + imageLocation + "\" />");

    StringBuffer imageBuffer = new StringBuffer (""); 
    // Pattern pattern = Pattern.compile("\\"+bbcode);
    Pattern pattern = Pattern.compile(Pattern.quote(bbcode));
    Matcher matcher = pattern.matcher(text);

    //populate the replacements map ...
    StringBuilder builder = new StringBuilder();
    int i = 0;
    while (matcher.find()) {

        //String orginal = replacements.get(matcher.group(1));
        imageBuffer.append("<img src=\"" + imageLocation + "\" />");
        String replacement = imageBuffer.toString();
        builder.append(text.substring(i, matcher.start()));

        if (replacement == null) {
            builder.append(matcher.group(0));
        } else {
            builder.append(replacement);
        }
        i = matcher.end();
    }

    builder.append(text.substring(i, text.length()));
    return builder.toString();
}

【问题讨论】:

    标签: java regex match bbcode


    【解决方案1】:

    要从字面上匹配 [] ,您应该转义它们。否则,它被用作表示一组字符的元字符。

    \[#[A-Fa-f0-9]{6}\]|\[[A-Fa-f0-9]{3}\]
    

    在 Java 字符串 litearls 中,\ 应该被转义。

    "\\[#[A-Fa-f0-9]{6}\\]|\\[[A-Fa-f0-9]{3}\\]"
    

    【讨论】:

      【解决方案2】:

      您需要使用 \ 转义括号以便匹配它们,因为它们是正则表达式符号:

       \[#[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}\]
      

      在 Java 字符串中,您还需要转义反斜杠:

       String pattern = "\\[#[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}\\]";
      

      【讨论】:

        【解决方案3】:

        如果您想在模式中包含括号以匹配,您必须使用 .但是因为java已经使用\作为转义字符,所以你必须使用其中的两个“\[...\]”

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-04-06
          • 2018-08-05
          • 1970-01-01
          • 2011-08-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多