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