2010-06-08 3 views
1

URI.extract prétend le faire, mais il ne gère pas appariés parens:URL Extrait de texte en utilisant Ruby lors de la manipulation appariés parens

>> URI.extract("text here (http://foo.example.org/bla) and here") 
=> ["http://foo.example.org/bla)"] 

Quelle est la meilleure façon d'extraire les URL de texte sans casser les URL parenthesized (qui les utilisateurs aiment utiliser)?

+2

ne peut pas vous juste enlever le dernier) si c'est inclus? – Garrett

+0

Je suppose, mais que se passe-t-il si une URL se termine par un ')'? –

+2

C'est pourquoi le) est inclus :) L'analyseur suppose qu'il fait partie de l'URL. Si vous voulez sortir des parenthèses correspondantes, vous devrez le gérer vous-même. – x1a4

Répondre

0

Si les URL sont toujours liées entre parenthèses, une expression régulière peut être une meilleure solution.

text = "text here (http://foo.example.org/bla) and here and here is (http://yet.another.url/with/parens) and some more text" 
text.scan /\(([^\)]*)\)/ 
-1

Avant d'utiliser cette

>> URI.extract("text here (http://foo.example.org/bla) and here") 
=> ["http://foo.example.org/bla)"] 

Vous devez ajouter cette

require 'uri' 
-1

Vous pouvez utiliser cette expression rationnelle pour extraire les URL d'une chaîne

"some thing http://abcd.com/ and http://google.com are great".scan(/(?:http|https):\/\/[a-z0-9]+(?:[\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(?:(?::[0-9]{1,5})?\/[^\s]*)?/ix) 
+0

Cela a le même défaut. Essayez de faire correspondre "(http://example.com/abc)". Cela inclura la parenthèse arrière. – rekado