Почему не работает следующее регулярное выражение:
Ваше выражение может быть разбито на
(.*(\[.*?\])((\/)?))
или
(\@(.*))
Прежнюю часть можно разбить на
.*
, затем
\[.*?\]
(что не совпадает с (\[.*\])?
), возможно с последующим
/
Вот еще одно предложение:
String part = "[^/\\[\\]]+(\\[\\d*\\])?";
String pattern = String.format("%s(/%<s)*(@.*)?", part);
Контрольные примеры:
String[] tests = {
"org/com[2]/net[4]/uk@name",
"org/com[2]/net[4]",
"org/com[2/net",
"org/com2]/net",
"org/com[2]/net",
"org/com[2]/net/",
"org/com[2]/net@blah",
};
for (String test : tests)
System.out.println(test + ": " + test.matches(pattern));
Выход:
org/com[2]/net[4]/uk@name: true
org/com[2]/net[4]: true
org/com[2/net: false
org/com2]/net: false
org/com[2]/net: true
org/com[2]/net/: false
org/com[2]/net@blah: true