2

かっこ以外の文字をいくつでも含む4組のかっこに一致する正規表現を作成する方法を見つけようとしています。

たとえば、これらは一致する必要があります。

[hello][world][foo][bar]
[][][][]

これらはすべきではありません:

[a][b][c]
[a][b][c][d]e
[[a]][b][c][d]

私が間違っていなければ、これ(以下)は1セットの括弧とその中の文字と一致しているようです。

\\[[^\\[\\]]*\\]

次のようにすると4セットに拡張できると思いましたが、うまくいきません。

[\\[[^\\[\\]]*\\]]{4}

ここで何が欠けていますか?助けてくれてありがとう。それは有り難いです。

4

2 に答える 2

8

これを試して:

Pattern p = Pattern.compile("^(\\[[^\\[\\]]*\\]){4}$");

あなたのためにそれを分解するには:

"^(\\[[^\\[\\]]*\\]){4}$"
 ││├─┘├───────┘│├─┘ │  └─ the end of the line.
 │││  │        ││   └─ repeat the capturing group four times.
 │││  │        │└─ a literal "]"
 │││  │        └─ the previous character class zero or more times.
 │││  └─ a character class containing anything but the literals "[" and "]"
 ││└─ a literal "[".
 │└─ start a capturing group.
 └─ the beginning of the string.
于 2012-04-12T21:26:40.750 に答える
4

繰り返したいチャンクをグループ化する必要があります。そうしないと、最後の]4回を繰り返すものにのみ一致します。

(\\[[^\\[\\]]*\\]){4}

Jamesが以下で指摘しているように、[]グループ化にを使用しようとしていたようです()。これは、エラーが発生した場所である可能性があります。

于 2012-04-12T21:26:32.910 に答える