J'ai du contenu texte avec une liste d'URL contenues.
J'essaie de saisir toutes les URL et de les mettre dans un tableau. P>
J'ai ce code P >
['http://www.google.com', 'http://www.google.com/index.html']
4 Réponses :
Je n'ai pas vérifié la syntaxe de votre regex, mais String.Scan produira une matrice, chacun de leurs membres étant un tableau des groupes correspondant à votre regex. Je m'attendrais donc que le résultat soit:
Vous aurez besoin de non -Matching Groupes edit (regarder regex): strong> aussi, Votre regex a l'air un peu faux. Vous ne voulez pas les ancres de démarrage et de fin ( Édition supplémentaire, après avoir joué: strong> Je pense que vous voulez quelque chose comme ceci: p> ... Mais notez qu'il a gagné " T Faites correspondre les URL pure IP-Adresse (comme [['http', '.google.com'], ...] code> p>
/ (?: Stuff) / code> Si vous souhaitez que le format que vous avez donné. p>
^ code> et
$ code>), car vous ne vous attendez pas à ce que les correspondances soient au début et à la fin du contenu
< / code>. Deuxièmement, si votre
([0-9] {1,5})? Code> tente de capturer un numéro de port, je pense que vous manquez d'un point de point pour séparer le domaine du port. p>
http://127.0.0.1 code>), en raison du
[AZ] {2,5} code> pour le TLD. P > p>
Une approche différente, du parfait-is-the-ennemi-de-la-bonne école de pensée:
Je vais vous donner de la simplicité. Cela pourrait bien être tout ce qui est nécessaire.
J'ai obtenu mon diplôme de cette école!
Cette approche manquera de nombreuses URL valides et de sélectionner incorrectement de nombreuses URL non valides.
EASY:
ruby-1.9.2-p136 :006 > require 'uri' ruby-1.9.2-p136 :006 > URI.extract(content, ['http', 'https']) => ["http://www.google.com", "http://www.google.com/index.html"]
Cela devrait être marqué comme la réponse. Beaucoup plus élégant.
Juste pour votre intérêt:
Ruby a un module URI, qui a une regex mise en œuvre pour faire de telles choses: p> Pour plus d'informations, visitez le Ruby Ref: URI P> < / p>