Как маскировать / скрывать IP-адрес (строку) с помощью PHP и регулярного выражения

Я хотел бы скрыть последние два раздела с IP-адреса, используя регулярное выражение, проблема в том, что астерикс ( * ) должен соответствовать длине этих разделов.

Например: 10.101.12.100 следует переделать в 10.101.**.***

Это код, с которым я работаю:

 echo preg_replace('!(\d+).(\d+).\d+.\d+!s', '${1}.${2}.***.***', "10.101.12.100"); // Return: 10.101.***.*** 

Возможно ли использование регулярного выражения?

PS: Я знаю, что могу сломать его, используя explode('.', ...) вместе с str_repeat('*', strlen(...)) но я нахожу preg_replace более чистым решением. Я ищу решение «oneliner».

Используйте негативный прогноз вперед (в основном, если регулярное выражение дисквалифицирует первые два октета, затем замените нормальную цифру после этого). Например

 (?!\d{1,3}\.\d{1,3}\.)\d 

демонстрация

Пример вывода:

 237.134.85.92 -> 237.134.**.** 173.14.176.182 -> 173.14.***.*** 167.209.41.203 -> 167.209.**.*** 137.133.204.130 -> 137.133.***.*** 93.108.72.157 -> 93.108.**.*** 

Это может быть немного злоупотребление регулярным выражением. Следующие, вероятно, быстрее, безопаснее и понятнее …

  1. Взорвать строку на "."
  2. Замените все символы в массиве index 2, 3 с помощью "*"
  3. Присоединяйтесь к "."
  4. прибыль.