2

ドメインをさまざまなカテゴリ (サブドメイン、ドメイン、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

正規表現も最も効率的ではないので、助けや提案をいただければ幸いです。ありがとう!

4

3 に答える 3

0

最近、同じ問題に遭遇しました。そこで、Syon の正規表現を少し修正しました。結果は次のとおりです。

\s(?:(?<subdomain>[a-z0-9\.\-]*)\.)?(?<domain>(?!com)[a-z0-9\-]{3,}(?=\.[a-z\.]{2,}))\.(?:(?<tld>[a-z\.]{2,})$)\s

これは、テスト データ セット全体 (ただし、スペースは削除しました) と、bit.ly. などの新しいトップ レベル ドメインでも機能します.cancerresearch。結果を見る: https://regex101.com/r/nX6yQ7/4

注: 正規表現は、 を にdomainできないことを具体的に示しています。他のサポートが必要なcom場合は、これを更新する必要があります。{3 characters}.xyz tlds

于 2015-07-29T09:53:35.103 に答える