Да, вы совершенно правы.Я пытаюсь выяснить, почему это происходит так.
Но на данный момент единственное, что я могу предложить, - это пойти с таким решением.
public class RegExTest
{
public static void main(String[] args)
{
String path = "$SERVER/public_html/ab1/ab2";
System.out.println("path before="+path);
String user = System.getProperty("user.dir");
System.out.println("user="+user);
System.out.println("replaceFirst using user="+path.replaceFirst("\\$SERVER", user));
path = path.replaceFirst("\\$SERVER", "");
path = user +path;
System.out.println("path after="+path);
}
}
РЕДАКТИРОВАТЬ : .. Почему это происходит?
Из того, что я вижу в коде строки метода с 701 по 708, они должны это сделать.Они просто пропускают их.Что касается причины, по которой они это делают, я все еще не уверен.
EDIT2: ОК, читая документацию по методу, отвечает на все вопросы.Они делают это, чтобы они могли соответственно интерпретировать специальные символы.Таким образом, при чтении замены они обнаруживают косую черту, алгоритм предполагает, что она может быть частью специального символа, и в результате пропускает ее.
if (nextChar == '\\') {
cursor++;
nextChar = replacement.charAt(cursor);
result.append(nextChar);
cursor++;
} else if (nextChar == '$') {
// Skip past $
cursor++;