Regex не работает, когда передается в качестве шаблона свойства - PullRequest
0 голосов
/ 11 июля 2019

Регулярное выражение, которое я пытаюсь найти, - это найти слово рядом с другим и заменить его! Когда я передаю это как свойство шаблона, оно, похоже, не работает.

Но, похоже, не работает в коде.

Я попробовал это регулярное выражение для проверки с помощью Java-программы по умолчанию, и, похоже, она работает нормально -> https://repl.it/repls/BlushingAccurateCarat

Когда я просто передаю (пароль через свойство), он делает * пароль.

Мой файл logback.xml

<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
    <layout class="com.vecna.nexus.facilities.loggerMasking.MaskingPatternLayout">
        <patternsProperty><![CDATA[(?<=password.{0,3})(\\w+)]]> 
        </patternsProperty>
        <pattern>%-5p %c{0} %d{dd MMM yyyy HH:mm:ss.SSS}: %m%n</pattern>
    </layout>
</encoder>

Мой код Java

public class MaskingPatternLayout extends PatternLayout {

    private String patternsProperty;

    private Optional<Pattern> pattern;

    public String getPatternsProperty() {
        return patternsProperty;
    }

    public void setPatternsProperty(String patternsProperty) {
        this.patternsProperty = patternsProperty;
        final Logger s_log = LoggerFactory.getLogger("CHECKING STUFF");
        s_log.info(this.patternsProperty);
        if (this.patternsProperty != null) {
            this.pattern = Optional.of(Pattern.compile(patternsProperty, Pattern.MULTILINE));
        } else {
            this.pattern = Optional.empty();
        }
    }

    @Override
    public String doLayout(ILoggingEvent event) {
        final StringBuilder message = new StringBuilder(super.doLayout(event));

        if (pattern.isPresent()) {
            Matcher matcher = pattern.get().matcher(message);
            while (matcher.find()) {

                int group = 1;
                while (group <= matcher.groupCount()) {
                    if (matcher.group(group) != null) {
                        for (int i = matcher.start(group); i < matcher.end(group); i++) {
                            message.setCharAt(i, '*');
                        }
                    }
                    group++;
                }
            }
        }

        return message.toString();
    }
}

Мне нужен вывод как -> пароль: ******** Но я просто получаю пароль: 12312312

1 Ответ

0 голосов
/ 11 июля 2019

Похоже, проблема была в дополнительном \ in (? <= Password. {0,3}) (\\ w +).Исправленное регулярное выражение, сработавшее </p>

<patternsProperty><![CDATA[((?<=password.{0,3})(\w+))]]> </patternsProperty>
...