作为模式属性传递时正则表达式不起作用
Regex not working when passed as a patternproperty
我正在尝试的正则表达式是找到另一个单词并替换它!
当我将其作为模式传递时 属性 它似乎不起作用。
但在代码中似乎不起作用。
我已经尝试用这个正则表达式来检查默认的 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
似乎 (?<=password.{0,3})(\\w+) 中的额外 \ 是问题所在。
正确的正则表达式有效
<patternsProperty><![CDATA[((?<=password.{0,3})(\w+))]]> </patternsProperty>
我正在尝试的正则表达式是找到另一个单词并替换它! 当我将其作为模式传递时 属性 它似乎不起作用。
但在代码中似乎不起作用。
我已经尝试用这个正则表达式来检查默认的 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
似乎 (?<=password.{0,3})(\\w+) 中的额外 \ 是问题所在。 正确的正则表达式有效
<patternsProperty><![CDATA[((?<=password.{0,3})(\w+))]]> </patternsProperty>