【问题标题】:Regex for hex color codes in bbcode?bbcode中十六进制颜色代码的正则表达式?
【发布时间】:2014-01-08 01:28:36
【问题描述】:

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

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

【问题讨论】:

  • 删除Pattern.quote,即转义bbcode中的所有正则表达式元字符。
  • 无论如何如何提取 [ ] 之间的 bbcode 词?

标签: java android regex bbcode


【解决方案1】:

试试这个

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

【讨论】:

  • 看起来不错,但您没有考虑到像 #123 这样的三位压缩值。
【解决方案2】:

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

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

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

【讨论】:

  • 不错的正则表达式,但您不必直接使用group(1)。只需在other answer 中执行replaceAll(),使用$1 将十六进制值重新插入。
猜你喜欢
  • 2020-02-16
  • 1970-01-01
  • 2012-10-02
  • 2018-03-17
  • 2011-10-25
  • 2011-09-20
  • 2019-04-25
  • 2011-10-03
相关资源
最近更新 更多