хотел заменить маску чувствительной информации ***** с помощью Regex - PullRequest
0 голосов
/ 26 апреля 2018

Например: <element name="XYZ" type="string">9032905776</element>

В приведенном выше регулярном выражении нам нужно проверить, имеет ли атрибут name значение "XYZ" или нет.

если атрибут name содержит "XYZ", он должен пропустить type = "String" и замаскировать 9032905776 как ***.

Ожидаемый результат: <element name="XYZ" type="string">***</element>

final String expressionTemplate = "(?<=<element name=\"(?i:XYZ)\"[a-z?]>)(.*?)(?=</element>)";
System.out.println("Regex :"+expressionTemplate);
System.out.println("\nRequest Before    :"+dummy);
System.out.println("Request After   :"+dummy.replaceAll(expressionTemplate.toString(), "*****"));

выход:

1 Ответ

0 голосов
/ 26 апреля 2018

Не анализировать HTML с регулярным выражением

Проблема в том, что независимо от того, какое регулярное выражение мы пишем, было бы легко придумать случай, когда он не работает. Только представьте, когда внутри type="string".

можно найти специальные символы.

Вместо этого вы должны использовать настоящий Java-парсер HTML (например, jsoup )


Однако, если вы хотите игнорировать мои предупреждения и использовать регулярное выражение, которое может легко нарушить некоторые необычные входные данные, попробуйте что-то вроде этого:

final String expressionTemplate = "(?<=<element name=\"XYZ\"[^>]{0,99}>)(.*?)(?=</element>)";

Известные проблемы:

  • прерывается, если в type = "string"
  • разрывается, если открывающий тег длиннее указанного количества (см. Жестко запрограммированный код 99)
  • множество других способов его поломки ... <!-- комментарии HTML и т. Д.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...