6
votes

Extraire toutes les URL à l'intérieur d'une chaîne de rubis

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']


0 commentaires

4 Réponses :


5
votes

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:

[['http', '.google.com'], ...]

Vous aurez besoin de non -Matching Groupes / (?: Stuff) / Si vous souhaitez que le format que vous avez donné.

edit (regarder regex): aussi, Votre regex a l'air un peu faux. Vous ne voulez pas les ancres de démarrage et de fin ( ^ et $ ), 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})? 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.

Édition supplémentaire, après avoir joué: Je pense que vous voulez quelque chose comme ceci: xxx

... Mais notez qu'il a gagné " T Faites correspondre les URL pure IP-Adresse (comme http://127.0.0.1 ), en raison du [AZ] {2,5} pour le TLD.


0 commentaires

5
votes

Une approche différente, du parfait-is-the-ennemi-de-la-bonne école de pensée: xxx


3 commentaires

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.



53
votes

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"] 


1 commentaires

Cela devrait être marqué comme la réponse. Beaucoup plus élégant.



4
votes

Juste pour votre intérêt:

Ruby a un module URI, qui a une regex mise en œuvre pour faire de telles choses: xxx

Pour plus d'informations, visitez le Ruby Ref: URI < / p>


0 commentaires