ドメインをさまざまなカテゴリ (サブドメイン、ドメイン、TLD) に分割しようとしていますが、問題が発生しています..
任意の数のサブドメインを照合し、ドメインまたは TLD の照合を追い越さない方法がわかりません。私は PCRE 正規表現を使用しています。
現在の正規表現:
\s(?:(?<subdomain>[a-z0-9\-]*){0,1}\.){0,3}(?<domain>(?>([a-z0-9\-]+)))\.(?<tld>[a-z\.]{2,6})\s
データセット:
apple.orange.banana.clevername.co.uk
strawberry.apple.orange.banana.clevername.co.uk
tangerine.com.au
simple.com
注:ドメインの前後にスペースがあり、常に小文字になります。
このデータがどのように一致するかの例:
apple.orange.banana.clevername.co.uk
サブドメイン: apple.orange.banana
ドメイン: google
tld: co.uk
サブドメイン (strawberry.apple.orange.banana.clevername.co.uk) に別の果物を追加すると、一致は失敗します。サブドメインの正規表現の {0,3} をより大きな数または無制限の数の一致に変更すると、貪欲になりすぎて、ドメイン/tld の正しい一致が得られなくなります。この例:
変更された正規表現:
\s(?:(?<subdomain>[a-z0-9\-]*){0,1}\.){0,5}(?<domain>(?>([a-z0-9\-]+)))\.(?<tld>[a-z\.]{2,6})\s
新しい正規表現との結果の一致:
ストロベリー.アップル.オレンジ.バナナ.クレバーネーム.co.uk
サブドメイン: ストロベリー.アップル.オレンジ.バナナ.クレバーネーム
ドメイン:
tld: co.uk
正規表現も最も効率的ではないので、助けや提案をいただければ幸いです。ありがとう!