2010-06-22 3 views

Répondre

20

Tout entre parenthèses dans une expression rationnelle sera capturé en tant que groupe, auquel vous pouvez accéder à $1, $2, etc. ou en utilisant [] sur un objet de match:

string.match(/:\d+(.+)$/)[1] 

Si vous utilisez la numérisation avec la capture groupes, vous obtiendrez un tableau de tableaux des groupes:

"Unnecessary:123data\nUnnecessary:5791next".scan(/:\d+(.+)$/) 
=> [["data"], ["next"]] 
1

Essayez ceci: /(?<=\:)\d+.+$/

Il change le deux-points en un look-behind positif afin qu'il n'apparaisse pas dans la sortie. Notez que le côlon seul est un métacaractère et doit donc être échappé avec un antislash.

+0

J'obtiens l'erreur 'SyntaxError: erreur de compilation non définie (? ...) séquence:/(? <=:) \ d +. + $/' –

+0

Haha. Le moteur d'Expression Régulière de Ruby n'implémente probablement pas les arrière-plans. Les autres réponses vous aideront à résoudre le problème. – huntaub

3

Utilisez une parenthèse dans votre expression régulière et le résultat sera décomposé en tableau. Par exemple:

x='Unnecessary:12357927251data' 
x.scan(/(:\d+)(.+)$/) 
=> [[":12357927251", "data"]] 
x.scan(/:\d+(.+$)/).flatten 
=> ["data"] 
0

aide IRB

irb(main):004:0> "Unnecessary:12357927251data".scan(/:\d+(.+)$/) 
=> [["data"]] 
1

En supposant que vous essayez d'obtenir la chaîne 'données' de votre chaîne, vous pouvez utiliser:

string.match(/.*:\d*(.*)/)[1] 

Chaîne # correspondance retourne un objet MatchData. Vous pouvez ensuite indexer dans cet objet MatchData pour trouver la partie de la chaîne que vous souhaitez.

(Le premier élément de MatchData est la chaîne d'origine, le deuxième élément est la partie de la chaîne capturée par les parenthèses)

Questions connexes