Я хотел бы скрыть последние два раздела с 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.**.***
Это может быть немного злоупотребление регулярным выражением. Следующие, вероятно, быстрее, безопаснее и понятнее …