Вы пробовали это с одной обратной косой чертой?Вывод
public static void main(String[] args) {
String inputString = "<xml lang=\"the Queen's English\">";
System.out.println(inputString.replaceFirst("lang=\"[^\"]*\"", "lang=\"American\"" ));
}
равен
<xml lang="American">
, который, если я правильно вас читаю, - это то, что вы хотите.
РЕДАКТИРОВАТЬ, чтобы добавить: причина aЕдинственная обратная косая черта работает так, что она на самом деле не является частью строки, это всего лишь часть синтаксиса для выражения строки.Длина строки "\""
равна 1, а не 2, а метод replaceFirst
просто видит строку, содержащую "
(без обратной косой черты).Вот почему, например, \s
(класс символов пропусков в регулярном выражении) должен быть записан \\s
в строковом литерале Java.
На мудрости использования регулярного выражения: это должно быть хорошо, если вы 'Вы уверены в формате файлов, которые вы обрабатываете.Если файлы могут содержать закомментированный заголовок, дополненный lang
спецификацией над реальным заголовком, у вас могут возникнуть проблемы!