Проблема в том, что символы обратной косой черты () в вашем регулярном выражении являются escape-символами для Java, поэтому он видит \.а также \?и думает, что вы пытаетесь сбежать.а?- следовательно, ошибка компиляции, о которой вы, вероятно, говорите, говоря о «недопустимых escape-символах».
Чтобы исправить это, вам нужно избежать обратных слешей с их собственными обратными слешами.Вы получите:
\\.и \\?
или в полном виде:
(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*\\. (?:jpg|gif|png))(?:\\?([^#]*))?(?:#(.*))?