Я сделал, что, как я полагал, ошибка в регулярном выражении в Java недавно, но когда я тестирую свой код, я не получаю ожидаемую ошибку.Unescaped "." по-прежнему совпадает с использованием в группе отрицания
Выражение, которое я создал, предназначалось для замены пароля в строке, полученной мной из другого источника. Образец, который я использовал, шел по строкам: «password: [^ \\ s.] *», Идея заключалась в том, что он соответствовал слову «пароль» двоеточия, пробелу, затем любые символы, кроме пробела или полный (период). Затем я заменил бы экземпляр «password: XXXXXX» и, следовательно, замаскировал его.
Очевидная ошибка должна заключаться в том, что я забыл избежать полной остановки. В других словах правильное выражение должно быть «password: [^ \\ s \\.] *». Дело в том, что, если я не уйду от полной остановки, код все еще работает!
Вот некоторые примеры кода:
import java.util.regex.*;
public class SimpleRegexTest {
public static void main(String[] args) {
Pattern simplePattern = Pattern.compile("password: [^\\s.]*");
Matcher simpleMatcher = simplePattern.matcher("password: newpass. Enjoy.");
String maskedString = simpleMatcher.replaceAll("password: XXXXXX");
System.out.println(maskedString);
}
}
Когда я запускаю приведенный выше код я получаю следующий результат:
password: XXXXXX. Enjoy.
Это особый случай, или я полностью пропустил что-то?
(редактирование: изменено на «избежать полной остановки»)
Майкл Borgwardt: Я не мог придумать другой термин, чтобы описать то, что я делал, кроме «отрицания группы», простите за двусмысленность.
Aviator: В этом случае нет, пробела не будет в пароле. Я не делал правил ;-).
(редактирование: согнулся в слэш в тексте без кода, так что отображается правильно, добавлена ^, который был в коде, а не текст: - /)
Сундара: Фиксированный двойные слеши, Кажется, что у этого есть свои персонажи-эвакуаторы.
Ваш вопрос немного запутанный - вы не используете группы отрицания в тексте, и говорите об ускорении «пространства», а не о том, как вы думаете, период. –
У меня есть один запрос. Не может быть символом пароля? Почему вы его исключили? – vpram86
Kurley, я думаю, вам не хватает точки Майкла Боргвардта: вы используете [^ \\ s.] * В коде, но [\ s.] * Без^в тексте над ним. Я думаю, что это опечатка в тексте, пожалуйста, исправьте это, поскольку это вызывает много путаницы. – sundar