У меня есть строка, которую я хочу разбить на части в каждой точке с запятой ;
.
Для этого я использую JAVA String.split(regex)
, создавая массив строк.
ПРИМЕР:
string 1;
string 2;
string 3;
string 4 (
substring 1;
substring 2;
substring 3;
);
string 4;
Я сейчас использую line.split("\\s*;\\s*");
...
Но это, как и ожидалось, но не хотелось, возвращает мне ["string 1", "string 2", "string 3", "string 4 (\nsubstring 1", "substring 2", "substring 3", ")", "string 4", ""]
.
Так как мне сопоставить каждый ;
, чтобы я мог разбить его, кроме тех, которые находятся внутри скобок (те, что после подстрок)?
РЕДАКТИРОВАТЬ:
Мне удалось создатьрегулярное выражение для соответствия ";"внутри скобки, но не снаружи ... но после использования логики и преобразования ~(a^b)
в ~av~b
(закон Моргана) я сделал регулярное выражение для соответствия ";"вне скобок.
Но это все еще не работает и все еще ломается в каждой точке с запятой ... это что-то с самой Java?
Текущий шаблон: ((?<![\S\s]*?\([\S\s]*?)|(?![\S\s]*?\)[\S\s]*?));