正则表达式用于 bbcode 中的十六进制颜色代码



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

[#123456]
[#aabc36]

然后转换为 HTML 代码:

<FONT COLOR="#123456">

但如果模式如下:

[/#123456]

然后替换为

</FONT>

我尝试了以下模式:

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

但它失败了。

而我想要的是将提取的颜色十六进制代码转换为HTML字体颜色以进行替换。

以下是我的正则表达式替换方法:

public String replaceColor(String text  , String imageLocation ){
    StringBuffer imageBuffer = new StringBuffer (""); 
    String bbcode = "\[#[A-Fa-f0-9]{6}\]|\[[A-Fa-f0-9]{3}\]";
    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("<FONT COLOR="#123456">");
        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();
}

试试这个

    s = s.replaceAll("\[#(\w{6}|\w{3})]", "<FONT COLOR="#$1>">")
             .replaceAll("\[/#(\w{6}|\w{3})]", "</FONT>");
您需要

删除Pattern.quote调用,这会使您的正则表达式匹配所有文字字符。 如果要捕获部分匹配项,则需要使用匹配组()。 为了简化它,请将您的表达式更改为以下内容:

String bbcode = "\[(#[A-Fa-f0-9]{3}([A-Fa-f0-9]{3})?)\]";

并使用matcher.group(1)引用方括号之间的部分。

相关内容

最新更新