Да, есть общее руководство по экранированию: Escape-последовательности в вашем исходном коде Java заменяются компилятором Java (или каким-то образом препроцессором).Компилятор будет жаловаться на любые escape-последовательности, которые ему не известны, например, \s
.Когда вы пишете строковый литерал для шаблона RegEx, компилятор обработает этот литерал как обычно и заменит все escape-последовательности соответствующим символом.Затем, когда программа выполняется, класс Pattern компилирует входную строку, то есть он будет оценивать escape-последовательности в другой раз.Класс Pattern знает \s
как класс символов и поэтому сможет компилировать шаблон, содержащий этот класс.Однако вам нужно экранировать \s
из компилятора Java, который не знает этой escape-последовательности.Для этого вы избегаете обратной косой черты, в результате чего получается \\s
.
Короче говоря, вам всегда нужно дважды экранировать классы символов для шаблонов RegEx.Если вы хотите сопоставить обратную косую черту, правильный шаблон будет \\\\
, потому что компилятор Java сделает его \\
, который компилятор Pattern распознает как экранированный символ обратной косой черты.