2014-01-07 196 views
1

我目前正在测试的正则表达式匹配以下Java的正则表达式模式不匹配的括号

[#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(); 
} 

回答

3

方法要匹配[]从字面上看,你应该逃避它们。否则,它将用作代表一组字符的元字符。

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

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

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

大声笑! :) –

2

你需要逃避与\支架,以匹配他们,因为他们是一个正则表达式符号:

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

在Java字符串中,还需要转义反斜线这样:

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

无法正常工作。代码不能被替换为

0

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