Шпаргалка по regexp
Выделить из URL домен второго уровня
строка:
query: alt4.gmail-smtp-in.z.google.com IN A + (192.168.1.81)
требуется получить на выходе google.com
regexp:
^query: (?:[^\.]+\.)*?([^\.]+\.[^\.]+) IN .+
Расшифровка:
(?:<pattern>)
- это группировка без выделения
[^\.]
- означает "не точка" (любой символ кроме точки)
*?
- ноль или более раз ("не жадный")
Итого, конструкция (?:[^\.]+\.)*?
выделяет один уровень домена и все уровни слева на право (ноль или более раз) кроме последних двух. Последние два уровня выделяются конструкцией ([^\.]+\.[^\.]+)
, они передаются в переменную $1;