使用Java正则表达式混淆密码

时间:2019-03-18 14:56:29

标签: java regex

我有这个正则表达式来混淆密码

myString.replaceAll(
    "<.{1,}:Password>.{1,}</.{1,}:Password>",
    "<!--<Password></Password> Removed-->");

当myString包含以下行时,它将成功混淆密码

<abc:Password>myPassword</abc:Password>

但是如果myString包含不带模式前缀的xml

<Password>myPassword</Password> it does not obfuscate the password.

如何扩展现有的正则表达式,以便处理两种情况?

1 个答案:

答案 0 :(得分:0)

当前,您正在使用大括号指定预期字符数的范围。 ({1,}

相反,您可以+*代表前一个字符的“一个或多个”(+)或“零个或多个”(*) 。换句话说,*{0,}类似,而+{1,}相同。另外,您可以使用?来表示“零或一”,类似于{0,1}

利用该知识,我们可以使用以下模式在元素名称(Password)的前面查找字符,并在其后加上一个冒号:

.+:

然后,可以通过将其放在前面带有?:的一组括号内(使其不被捕获),将其放入一个非捕获组中,并使其寻找零或-更多实例。

(?:.+:)?

因此,您的字符串可以更改为:

<(?:.+:)?Password>.+</(?:.+:)?Password>