我做了,我认为是最近在Java中的正则表达式中的错误,但是当我测试我的代码时,我没有得到我期望的错误.
我创建的表达式旨在替换我从其他来源收到的字符串中的密码.我使用的模式是:"密码:[^ \\ s.]*",这个想法是它会匹配单词"password"冒号,一个空格,然后是除了空格或者空格之外的任何字符全程(期间).然后我会用"password:XXXXXX"替换实例,因此将其屏蔽.
明显的错误应该是我忘记了逃避全程.换句话说,正确的表达式应该是"password:[^ \\ s \\.]*".事情是,如果我没有逃脱全停,代码仍然有效!
这是一些示例代码:
import java.util.regex.*;
public class SimpleRegexTest {
public static void main(String[] args) {
Pattern simplePattern = Pattern.compile("password: [^\\s.]*");
Matcher simpleMatcher = simplePattern.matcher("password: newpass. Enjoy.");
String maskedString = simpleMatcher.replaceAll("password: XXXXXX");
System.out.println(maskedString);
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行上面的代码时,我得到以下输出:
password: XXXXXX. Enjoy.
Run Code Online (Sandbox Code Playgroud)
这是一个特例,还是我完全错过了什么?
(编辑:改为"逃避全程")
迈克尔博格沃特:我想不出另一个术语来描述我在做什么,除了"否定组",抱歉模糊不清.
飞行员:在这种情况下,不,密码中不会有空格.我没有制定规则;-).
(编辑:将非代码文本中的斜杠加倍,以便正确显示,添加代码中的^,但不添加文本: - /)
Sundar:修正了双斜线,SO似乎拥有它自己的逃脱角色.