что такое регулярное выражение для этого? - PullRequest
2 голосов
/ 22 декабря 2011

Мне нужно замаскировать пароль до его отображения в файле журнала.

формат пароля - «пароль»: «pswd123». это только буквенно-цифровой. После маскировки это будет «пароль»: «*»

в моем пользовательском классе Pattern есть следующее выражение reg, но оно не поднято. Есть идеи, как это должно быть? ТНХ

@Override
public String format(LoggingEvent event) {

    String msg = super.format(event);

    // regexp not being picked up
    msg = msg.replace("\"password\":\"[^\"]*", "password:\"***\"");

    return msg;
}

Ответы [ 5 ]

4 голосов
/ 22 декабря 2011

String.replace() занимает CharSequence, а не регулярное выражение.Вы, вероятно, ищете replaceAll() или replaceFirst().

0 голосов
/ 22 декабря 2011

Используете ли вы какую-либо библиотеку журналов, такую ​​как log4j или slf4j?Эти библиотеки имеют функции для «замены строк» ​​с помощью регулярных выражений.Вы можете использовать и применять это глобально, изменив в файле конфигурации журнала.Вам все еще нужно было бы найти регулярное выражение, для которого используется утилита построения регулярных выражений, например http://myregexp.com/, и создать регулярное выражение самостоятельно.

0 голосов
/ 22 декабря 2011

Если вы хотите, чтобы он просто показывал 3 *, это просто, если вы хотите, чтобы он показывал 1 * для каждого символа в пароле, это немного сложнее.

Msg = Regex.Replace(Msg, "\"Password\":\"[^\"]+?\"", "\"Password\":\"***\"")
0 голосов
/ 22 декабря 2011
  1. replaceAll - это то, что вы ищете
  2. Если вы хотите полное совпадение, вам не хватает последнего \ "в конце регулярного выражения
0 голосов
/ 22 декабря 2011

Использование .replaceFirst(), .replace() заменяет только подстроки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...