2009-08-26 3 views
0

Pour mes utilisateurs, je dois présenter un écran où ils peuvent entrer plusieurs noms de domaine dans une zone de texte. Les utilisateurs peuvent mettre les noms de domaine sur des lignes différentes, ou les séparer par des espaces ou des virgules (peut-être même des points-virgules - je ne sais pas!)PHP analyse la zone de texte pour les noms de domaine entrés (séparés par des espaces, des virgules, des nouvelles lignes)

Je dois analyser et identifier les noms de domaine individuels avec extension (qui sera .com , n'importe quoi d'autre peut être ignoré).

entrée utilisateur peut être aussi:

asdf.com

qwer.com

ET/OU

wqer.com, gwew.com

ET/OU

ertert.com gdfgdf.com

Personne ne saisira un domaine à 3 niveaux comme www.abczone.com, mais si c'est le cas, je ne suis intéressé que par l'extraction de la partie abczone.com. (Je peux avoir une regex séparée pour vérifier/extraire cela de chaque).

Répondre

1

Cela fera:

(\b[a-zA-Z][a-zA-Z0-9-]*)(?=\.com\b) 

« Trouver toutes les séquences d'une lettre suivie par des lettres, des chiffres ou des traits d'union, suivi par .com puis une pause de mot. »

(Vous devez le dernier bit pour protéger contre les ramasser bim.com de bim.command.com.)

cas de test Python parce que je n'ai pas un environnement de test PHP à la main:

DATA = "asdf.com\nx-123.com, gwew.com bim.command.com 123.com, x_x.com" 
import re 
print re.findall(r'(\b[a-zA-Z][a-zA-Z0-9-]*)(?=\.com\b)', DATA) 
# Prints ['asdf', 'x-123', 'gwew', 'command'] 
+0

Presque, mais: 1) un nom de domaine ne peut pas commencer avec les chiffres, 2) un nom de domaine c annot contient plus de 63 caractères, 3) un nom de domaine ne peut pas contenir "_". –

+1

@eyze: Correction de 1 et 3. – RichieHindle

+0

@RichieHindle: Aussi, pourquoi le .com est-il dans un groupe non-capturant? Il n'y a pas besoin de mon point de vue. –

0

Ici, il est , vous pouvez utiliser le modificateur i et supprimer toutes les majuscules AZ si vous voulez:

\b([a-zA-Z][0-9a-zA-Z\-]{1,62})\.com\b 
+0

Malheureusement aussi échoue pour "this-domain-name-is-longer-than-63-characters-and-heant-not-valid.com", renvoyant "domain-name-is-long-than-63-characters-and-by- pas valide". – RichieHindle

+0

@RichieHindle: Je ne suis pas d'accord, si trouve une sous-chaîne qui peut être considérée comme un domaine valide. C'est soit cela ou rien, alors que votre implémentation retourne juste un nom de domaine qui ne peut pas exister. –

Questions connexes