Вложенные операторы Case в SQL перед основным предложением ELSE

Обновление с различными решениями для маскировки электронной почты
  • foo@bar.comf**@b**.com (текущий вопрос) - s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*\\.)", "*") (см. демо-версия regex )
  • foo@bar.comf**@b*r.com - s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*[^@]\\.)", "*") (см. демо-версия regex )
  • foo@bar.comf*o@b*r.com - s.replaceAll("(?<=.)[^@](?=[^@]*?[^@]@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*[^@]\\.)", "*") (см. ] demo [regex] )
  • foo@bar.comf**@b*****m - s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?!$)", "*") (см. демо-версия )
  • foo@bar.comf*o@b*****m - s.replaceAll("(?<=.)[^@](?=[^@]*[^@]@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?!$)", "*") (см. демо-версия regex )

Оригинальный ответ

Если вы не можете использовать кнопку на основе кода , вы можете использовать

s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*\\.)", "*")

См. демонстрацию regex

Что он делает:

  • (?<=.)[^@](?=[^@]*?@) -any char, отличный от @ ([^@]), которому предшествует любой одиночный символ ((?<=.)), за которым следуют любые 0 или более символов, кроме @, до a @ ((?=[^@]*?@))
  • | - или
  • (?:(?<=@.)|(?!^)\\G(?=[^@]*$)) - соответствует местоположению в строке, которой предшествуют @ и любой символ ((?<=@.)) или (|) конец предыдущего успешного совпадения ((?!^)\\G), за которым следуют любые символы 0+, отличные от @ uo до конца строки ((?=[^@]*$))
  • . - любой одиночный символ
  • (?=.*\\.) - за ним следуют любые символы 0+ до последнего символа . в строке.
0
задан geeking4math 22 March 2019 в 17:32
поделиться