Заменить строку не в данном регулярном выражении Java - PullRequest
0 голосов
/ 16 мая 2018

Я пытаюсь заменить строку, которая не найдена в данном регулярном выражении.

Regex: (^.{1})|((.{1})(@.*))

Например: если задано значение dineshkani.n@gmail.com, вышеприведенное регулярное выражение будет извлекать "d", "n@gmail.com". Я пытаюсь заменить символы, отличные от этого регулярного выражения. Я пытался получить d**********n@gmail.com

Есть ли способ заменить таким образом.

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 16 мая 2018

Можете ли вы заменить символы, которые существуют между двумя опорными точками, с помощью регулярного выражения?Да.

Взгляните на полезные ресурсы, приведенные ниже.

Начало строки и конец якоря строки

SO Вопрос о запутывании писем с помощьюШаблоны REGEX

Вы на правильном пути.Ваш шаблон должен содержать не менее 3 групп захвата .Первая группа захвата будет первым символом в строке, адрес электронной почты в вашем примере.Вторая группа захвата будет символами от позиции 2 до предпоследней позиции перед символом @.А третьей группой захвата станут остальные персонажи.Используя ваш адрес электронной почты в качестве примера:

     [d]              [ineshkani.]       [n@gmail.com]
Capture group 1 --- Capture group 2 --- Capture group 3

Теперь, когда он захвачен правильно, мы хотим выполнить замену для группы захвата 2, которая заменит каждому символу какое-то значение обфускации, например *.Для этого потребуется обратная ссылка для группы 2.

([\w|\d]{1})  # This says match either a word or digit char occurring once
([\S]+)       # Match a non whitespace character with a greedy qualifier
(\S{1}\@\S+)  # Match a non whitespace character then an '@' then the rest of the characters until whitespace is found. 

Теперь вам нужно будет использовать обратную ссылку на группу 2 в вашей функции замены Java.См. этот SO-ответ , где приведен хороший пример способов замены регулярных выражений в группах захвата.Вам нужно будет использовать .replaceAll() и передать группу захвата и строку замены.Я надеюсь, что это поможет вам решить вашу проблему и понять, что происходит, когда вы используете регулярные выражения для замены строк в Java.

Подробнее о жадном квантификаторе см. В руководстве по регулярным выражениям.

0 голосов
/ 16 мая 2018

Вероятно, проще вообще не использовать regex.

Почему бы просто не использовать StringBuilder, просто взглянуть на 1 to lastIndexOf("@") - 1 и установить символ как *

String email = "dineshkani.n@gmail.com";
StringBuilder sb = new StringBuilder(email);
int mp = sb.lastIndexOf("@");

for (int i = 1; i < mp - 1; i++) {
    sb.setCharAt(i, '*');
}

Выход:

d**********n@gmail.com

Примечание : как уже упоминалось в комментариях, вам придется проверить с помощью этого решения, является ли электронная почта чем-то вроде dn@gmail.com, она просто распечатает это как есть.

0 голосов
/ 16 мая 2018

Почему бы вам не объединить эти части вместе?В Java используется метод соединения:

String email = String.join("*****",arrayOfSplits);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...