Est-ce que quelqu'un connaît une expression régulière pour faire correspondre le domaine.ctld? Je ne veux pas de sous-domaines, seul le "domaine atomique". Par exemple, EDIT: strong> J'ai réalisé que je dois aussi traiter plusieurs sous-domaines, comme docs.google.com code> n'est pas apparié, mais
google.com code> fait. Cependant, cela se complique avec des trucs comme
.co.uk code>, CCTLD. Est-ce que quelqu'un sait une solution? Merci d'avance. P>
john.doe.google.co.uk code>. Besoin d'une solution maintenant plus que jamais: p. P>
3 Réponses :
On dirait que vous recherchez les informations disponibles via le liste de suffixe publique projet. p>
Un "suffixe public" est un sous lequel les utilisateurs d'Internet peuvent directement enregistrer des noms. Quelques exemples de suffixes publics sont ".com", ".fr.uk" et "pvt.k12.wy.us". La liste de suffixe publique est une liste de suffixes publics connus. p> blockQuote>
Il n'y a pas d'expression régulière unique qui correspondra raisonnablement la liste des suffixes publics. Vous devrez mettre en œuvre le code pour utiliser la liste de suffixe publique ou trouver une bibliothèque existante qui le fait déjà. P>
Liste intéressante et probablement très utile.
Merci, greg. C'est absolument la bonne réponse. Il existe des bibliothèques pour faire le traitement de la liste de suffixe publique dans plusieurs langues à dkim-reputation.org/regdom- libs
@Anirvan, connaissez-vous un équivalent pour Python? La bibliothèque que vous avez postée n'est disponible que dans C, PHP et Perl.
@Tom: Plus d'un an plus tard, voici un package Python pour le travail: PYPI.PYTHON.ORG/PYPII / Publicsuffix
Je résoudrais probablement cela en obtenant une liste complète des TLD et l'utiliser pour créer la regex. Par exemple (en ruby, désolé, pas encore de Pythonista):
tld_alternation = ['\.com','\.co\.uk','\.eu','\.org',...].join('|') regex = /^[a-z0-9]([a-z0-9\-]*[a-z0-9])?(#{tld_alternation})$/i
Basé sur votre commentaire ci-dessus, je vais réinterpréter la question - plutôt que de faire une regex qui les correspondra, nous allons créer une fonction qui les correspondra et appliquera cette fonction pour filtrer une liste de domaine noms à inclure uniquement les domaines de première classe, par exemple google.com, amazon.co.uk.
Premièrement, nous aurons besoin d'une liste de TLDS. Comme Greg mentionné, la liste de suffixe publique est un endroit idéal pour commencer. Supposons que vous ayez égalisé la liste dans une matrice Python appelée suffixes code>. Si ce n'est pas quelque chose de votre confort avec, commentaire et que je peux ajouter du code qui le fera. P>
def is_domain(d):
for suffix in suffixes:
if d.endswith(suffix):
# Get the base domain name without suffix
base_name = d[0:-(suffix.length + 1)]
# If it contains '.', it's a subdomain.
if not base_name.contains('.'):
return true
# If we get here, no matches were found
return false
Merci! Je peux trouver mon chemin d'ici.
Aucun problème! Heureux d'avoir pu aider.
Vous pouvez maintenant utiliser un package Python simple mais excellent pour faire le levage lourd pour cela: pypi.python.org/ PYPI / Publicsuffix
Avez-vous explicitement besoin d'une regex ou une fonction pour le faire suffire?
Cela deviendrait une assez grande regex, voyant que vous auriez besoin de traiter toutes les CCSLD comme cas spéciaux, et il y a beaucoup de choses (et je veux dire beaucoup) de CSCLDS. Le Brésil en a 66!
@Benson, une fonction fonctionnerait, tant qu'elle pouvait trouver Domain.CCTLD dans une longue liste de domaines
Dupliqué possible de Obtenez le sous-domaine d'une URL