我试图弄清楚如何编写一个正则表达式,该表达式将匹配包含任意数量的非括号字符的4组括号。

例如,这些应匹配。

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


这些不应:

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


如果我没记错的话,这个(下)似乎匹配一组括号和其中的字符。

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


我以为可以通过执行以下操作将其扩展到4套,但它不起作用。

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


我在这里想念什么?在此先感谢您的帮助。我很感激。

最佳答案

试试这个:

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.

09-10 12:04
查看更多