我有这个正则表达式来混淆密码
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.
如何扩展现有的正则表达式,以便处理两种情况?
答案 0 :(得分:0)
当前,您正在使用大括号指定预期字符数的范围。 ({1,}
)
相反,您可以+
或*
代表前一个字符的“一个或多个”(+
)或“零个或多个”(*
) 。换句话说,*
与{0,}
类似,而+
与{1,}
相同。另外,您可以使用?
来表示“零或一”,类似于{0,1}
。
利用该知识,我们可以使用以下模式在元素名称(Password
)的前面查找字符,并在其后加上一个冒号:
.+:
然后,可以通过将其放在前面带有?:
的一组括号内(使其不被捕获),将其放入一个非捕获组中,并使其寻找零或-更多实例。
(?:.+:)?
因此,您的字符串可以更改为:
<(?:.+:)?Password>.+</(?:.+:)?Password>