Попробуйте это:
String regex = "(?m)^(A\\s*+=\\s*+)"
+ "(?:[^\r\n\\\\]++|\\\\(?:\r?\n|\r|.))*+$";
Я оставил первую часть, как вы написали, чтобы я мог сосредоточиться на сопоставлении значения; правила, управляющие ключом и разделителем, на самом деле намного сложнее.
Значение состоит из нуля или более любого символа, кроме возврата каретки, перевода строки или обратной косой черты, или обратной косой черты, за которой следует разделитель строк или любой отдельный символ, не являющийся разделителем строк. Разделитель строк может быть любой из трех наиболее распространенных форм: DOS / Windows (\r\n
), Unix / Linux / OSX (\n
) или Mac OS до * (\r
).
Обратите внимание, что регулярное выражение находится в многострочном режиме, поэтому якорные линии будут работать, но не однострочный (DOTALL) режим. Я также использовал квантификаторы притяжательности повсюду, потому что знаю, что возврат никогда не будет полезным.