-2

我要匹配[#ABABAB]blah blah blah[/#ABABAB]

但我不想匹配[#ABABAB]blah blah blah[/#000000]

ABABAB 和 000000 是十六进制颜色代码。

第一个是我想要的,因为它的打开标签和关闭标签的颜色代码是相同的,但第二个不是。

我尝试过这种模式,但没有奏效:\[#[0-9|A-F]{6}\].*\[/#[0-9|A-F]{6}\]

4

2 回答 2

5

尝试这个:

\[(#[0-9a-fA-F]{6})\].*?\[/\1\]

System.out.println("[#ABABAB]blah blah blah[/#ABABAB]"
        .matches("\\[(#[0-9a-fA-F]{6})\\].*?\\[/\\1\\]"));

System.out.println("[#ABABAB]blah blah blah[/#000000]"
        .matches("\\[(#[0-9a-fA-F]{6})\\].*?\\[/\\1\\]"));
真的
错误的
于 2013-08-08T13:43:38.153 回答
1

如果您的输入看起来像

"xxxx[#aaaaaa]yyyyy[#bbbbbb]zzzzzz[/#bbbbbb]yyyyy[/#aaaaaa]zzzzzz"

wherex将有默认颜色,y将有 aaaaaa 颜色,z并将有 bbbbbb 颜色,你想找到

[#aaaaaa]yyyyy[#bbbbbb]zzzzzz[/#bbbbbb]yyyyy[/#aaaaaa]

[#bbbbbb]zzzzzz[/#bbbbbb]

您应该在arshajii 的答案中添加前瞻(?=...) 机制来制作您的正则表达式

"(?=(\\[(#[0-9a-fA-F]{6})\\].*?\\[/\\2\\]))"

演示

String data="xxxx[#aaaaaa]yyyyy[#bbbbbb]zzzzzz[/#bbbbbb]yyyyy[/#aaaaaa]zzzzzz";

Pattern p=Pattern.compile("(?=(\\[(#[0-9a-fA-F]{6})\\].*?\\[/\\2\\]))");
Matcher m=p.matcher(data);
while(m.find())
    System.out.println(m.group(1));

输出

[#aaaaaa]xxxx[#bbbbbb]yyyy[/#bbbbbb]xxxxx[/#aaaaaa]
[#bbbbbb]yyyy[/#bbbbbb]
于 2013-08-08T14:30:30.743 回答