-2

合わせたい[#ABABAB]blah blah blah[/#ABABAB]

でも合わせたくない[#ABABAB]blah blah blah[/#000000]

ABABAB と 000000 は 16 進数のカラー コードです。

最初のものは、開始タグと終了タグの色コードが同じであるため、私が望むものですが、2番目のものはそうではありません。

このパターンを試しましたが、うまくいきませんでした:\[#[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"

どこxにデフォルトの色yがあり、aaaaaa の色があり、zbbbbbb の色があり、見つけたい

[#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 に答える