Ran*_*ski 3 java regex regex-lookarounds
我正在尝试编写一个正则表达式来掩盖电子邮件地址.以下示例.
输入:john.doe@example.en.com
输出:j*******@e*********.com
我尝试了以下但我似乎无法让它正常工作.
正则表达式:
(?<=.).(?=[^@]\*?@)输出:J-*******@ example.en.com
正则表达式:
(?<=.).(?=[^@]\*?)(?=[^\.]\*?\.)输出:J-******************融为一体.
任何帮助,将不胜感激. 演示
foo@bar.com⇒f**@b**.com(当前问题) - s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*\\.)", "*")(参见正则表达式演示)
foo@bar.com⇒f**@b*r.com - s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*[^@]\\.)", "*")(参见正则表达式演示)
foo@bar.com⇒f*o@b*r.com - s.replaceAll("(?<=.)[^@](?=[^@]*?[^@]@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*[^@]\\.)", "*")(参见正则表达式演示)
foo@bar.com⇒f**@b*****m - s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?!$)", "*")(参见正则表达式演示)
foo@bar.com⇒f*o@b*****m - s.replaceAll("(?<=.)[^@](?=[^@]*[^@]@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?!$)", "*")(参见正则表达式演示)
如果您不能使用基于代码的解决方案,您可以使用
s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*\\.)", "*")
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示
它做了什么:
(?<=.)[^@](?=[^@]*?@)- 除了@([^@])之外的任何char,前面是任何一个char((?<=.)),后跟任何0或更多的字符,而不是@a @((?=[^@]*?@))| - 要么(?:(?<=@.)|(?!^)\\G(?=[^@]*$)) - 匹配前面带有的字符串中的位置@和任何char((?<=@.))或(|)前一个成功匹配((?!^)\\G)的结尾,后面跟着除@uo 之外的任何0+字符到string((?=[^@]*$))的末尾. - 任何单个字符(?=.*\\.)- 跟随任何0+字符到.字符串中的最后一个符号.