ここで必要となる正規表現は、ホスト名が無限に複雑になる可能性があるため、少しトリッキーになる可能性があります。複数の部分 (つまり、www.baz.co.uk)。
複雑な正規表現の準備はできましたか? :)
re = /^(?:(?>[a-z0-9-]*\.)+?|)([a-z0-9-]+\.(?>[a-z]*(?>\.[a-z]{2})?))$/i
new_url = o_url.host.gsub(re, '\1').strip
これを 2 つのセクションに分けましょう。^(?:(?>[a-z0-9-]*\.)+?|)
1 つまたは複数の文字グループにドットを続けて一致させることにより、サブドメインを収集します (すべてのサブドメインがここで一致するように貪欲に)。サブドメイン (foo.com など) がない場合は、空の代替が必要です。([a-z0-9-]+\.(?>[a-z]*(?>\.[a-z]{2})?))$
実際のホスト名と TLD を収集します。1 部構成の TLD (.info、.com、.museum など)、または 2 部構成の TLD (2 番目の部分が 2 文字 (.oh.us、.org.uk など)) のいずれかを使用できます。
この式を次のサンプルでテストしました。
foo.com => foo.com
www.foo.com => foo.com
bar.foo.com => foo.com
www.foo.ca => foo.ca
www.foo.co.uk => foo.co.uk
a.b.c.d.e.foo.com => foo.com
a.b.c.d.e.foo.co.uk => foo.co.uk
この正規表現は、2 つ以上の「部分」を持つホスト名を TLD に適切に一致させないことに注意してください。