Альтернатива (?|) для Java
final String regex = "(?|\"([^\"]+)\"|(\\S+))";
На такую регулярку машина выдаёт
Exception in thread "main" java.util.regex.PatternSyntaxException: Unknown inline modifier near index 2
(?|"([^"]+)"|(\S+))
Есть ли альтернатива данной конструкции?
Ответы (1 шт):
Автор решения: Wiktor Stribiżew
→ Ссылка
В регулярных выражениях Java группы со сбросом индексов захватывающих групп (branch reset group) не поддерживаются.
Используйте "\"([^\"]+)\"|(\\S+)" и берите совпадения из подмасок, если значение подмаски не равно null:
String s = "\"abc\" def \"ghi jkl\"";
Pattern pattern = Pattern.compile("\"([^\"]+)\"|(\\S+)");
Matcher matcher = pattern.matcher(s);
List<String> results = new ArrayList<>();
while (matcher.find()){
if (matcher.group(1) != null) {
results.add(matcher.group(1));
} else {
results.add(matcher.group());
}
}
System.out.println(results); // => [abc, def, ghi jkl]