Вы можете написать регулярное выражение, которое не нуждается в чередовании и может иметь только одну группу, к которой вы можете получить уникальный доступ, чтобы получить значение, и даже лучше, если вы используете положительные обходные пути, чтобы просто захватить предполагаемое значение с помощью этого регулярного выражения,
(?<=[([])[^()[\]]*(?=[)\]])
Объяснение:
(?<=[([])
- Позитивный взгляд на то, что предыдущий символ является либо (
, либо [
[^()[\]]*
- Соответствует любому символу, кроме открывающей или закрывающей скобки (?=[)\]])
- Положительный взгляд вперед, чтобы убедиться, что он соответствует либо )
или ]
Демонстрация
Примеры кодов Java,
String s = "Example_(xxxxx)_AND_(yyyyy)_2019-01-28";
Pattern p = Pattern.compile("(?<=[(\\[])[^()\\[\\]]*(?=[)\\]])");
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println(m.group());
}
Печать,
xxxxx
yyyyy
В качестве альтернативы, как я уже упоминал выше, вы можете использоватьэто не смотреть вокруг регулярных выражений и захватить только group1, чтобы получить ваш контент, так как это регулярное выражение не имеет никакого чередования, следовательно, только одна группа.
[([]([^()[\]]*)[)\]]
Демо без обходных регулярных выражений
Образец кода Java с отсутствующим внешним видомd regex, где вам нужно захватить, используя group(1)
String s = "Example_(xxxxx)_AND_(yyyyy)_2019-01-28";
Pattern p = Pattern.compile("[(\\[]([^()\\[\\]]*)[)\\]]");
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println(m.group(1));
}
Prints,
xxxxx
yyyyy