foo@bar.com
⇒ f**@b**.com
(текущий вопрос) - s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*\\.)", "*")
(см. демо-версия regex ) foo@bar.com
⇒ f**@b*r.com
- s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*[^@]\\.)", "*")
(см. демо-версия regex ) foo@bar.com
⇒ f*o@b*r.com
- s.replaceAll("(?<=.)[^@](?=[^@]*?[^@]@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*[^@]\\.)", "*")
(см. ] demo [regex] ) foo@bar.com
⇒ f**@b*****m
- s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?!$)", "*")
(см. демо-версия ) foo@bar.com
⇒ f*o@b*****m
- s.replaceAll("(?<=.)[^@](?=[^@]*[^@]@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?!$)", "*")
(см. демо-версия regex ) Если вы не можете использовать кнопку на основе кода , вы можете использовать
s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*\\.)", "*")
См. демонстрацию regex
Что он делает:
(?<=.)[^@](?=[^@]*?@)
-any char, отличный от @
([^@]
), которому предшествует любой одиночный символ ((?<=.)
), за которым следуют любые 0 или более символов, кроме @
, до a @
((?=[^@]*?@)
) |
- или (?:(?<=@.)|(?!^)\\G(?=[^@]*$))
- соответствует местоположению в строке, которой предшествуют @
и любой символ ((?<=@.)
) или (|
) конец предыдущего успешного совпадения ((?!^)\\G
), за которым следуют любые символы 0+, отличные от @
uo до конца строки ((?=[^@]*$)
) .
- любой одиночный символ (?=.*\\.)
- за ним следуют любые символы 0+ до последнего символа .
в строке.