我目前正在尝试测试与以下内容匹配的正则表达式模式:
[#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();
}
答案 0 :(得分:3)
试试这个
s = s.replaceAll("\\[#(\\w{6}|\\w{3})]", "<FONT COLOR=\"#$1>\">")
.replaceAll("\\[/#(\\w{6}|\\w{3})]", "</FONT>");
答案 1 :(得分:2)
您需要删除Pattern.quote
调用,这使您的正则表达式匹配所有文字字符。如果要捕获部分匹配项,则需要使用匹配组()
。要简化它,请将表达式更改为:
String bbcode = "\\[(#[A-Fa-f0-9]{3}([A-Fa-f0-9]{3})?)\\]";
并使用matcher.group(1)
引用方括号之间的部分。