合わせたい[#ABABAB]blah blah blah[/#ABABAB]
でも合わせたくない[#ABABAB]blah blah blah[/#000000]
ABABAB と 000000 は 16 進数のカラー コードです。
最初のものは、開始タグと終了タグの色コードが同じであるため、私が望むものですが、2番目のものはそうではありません。
このパターンを試しましたが、うまくいきませんでした:\[#[0-9|A-F]{6}\].*\[/#[0-9|A-F]{6}\]
これを試して:
\[(#[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\\]"));
真実 間違い
入力が次のようになる場合
"xxxx[#aaaaaa]yyyyy[#bbbbbb]zzzzzz[/#bbbbbb]yyyyy[/#aaaaaa]zzzzzz"
どこx
にデフォルトの色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]