Регулярное выражение и экранированный и неэкранированный разделитель

вопрос, связанный с this

У меня есть строка

a\;b\\;c;d

, которая в Java выглядит как

String s = "a\\;b\\\\;c;d"

Мне нужно разделить его точкой с запятой по следующим правилам:

  1. Если точке с запятой предшествует обратная косая черта, ее не следует рассматривать как разделитель (между a и b ).

  2. Если обратная косая черта экранируется и, следовательно, не экранируется точкой с запятой, эта точка с запятой должна быть разделителем (между b и c ).

Таким образом, точку с запятой следует рассматривать как разделитель, если перед ней стоит ноль или четное количество обратных косых черт.

Например, я хочу получить следующие строки (двойные обратные косые черты для компилятора java):

a\;b\\
c
d

7
задан Community 23 May 2017 в 12:20
поделиться