2010-01-19 10 views
7

Came attraverso questa pratica utilità di espressioni regolari in Python (io sono un principiante in Python). per esempio. Usando l'espressione regolareNomi di nomi simbolici (come in Python) in Ruby Regular Expression

(?P<id>[a-zA-Z_]\w*) 

posso fare riferimento ai dati appaiati come

m.group('id') 

(La documentazione completa: cerca "il nome del gruppo simbolico" here)

In Ruby, siamo in grado di accedere al riferimenti abbinati utilizzando $1, $2 o utilizzando l'oggetto MatchData (m[1], m[2] ecc.). C'è qualcosa di simile ai nomi simbolici di Python in Ruby?

stampa
+0

Se sei in 1.8 e non puoi usare Onigurama per qualche motivo, un'alternativa interessante potrebbe essere la libreria [re] (http://github.com/jimweirich/re) di Jim Weirich –

risposta

11

più vecchio di Ruby non hanno chiamato i gruppi, ma, se si sta utilizzando Ruby 1.9 ... (tx Alan per aver sollevato la questione in un commento!):

(?<name>subexp) esprime un gruppo denominato in Ruby espressioni anche; \k<name> è il modo in cui si effettua il back-reference di un gruppo con nome in sostituzione, se questo è ciò che si sta cercando!

+3

Attenzione che i gruppi con nome sono una caratteristica del nuovo motore regex di Oniguruma. Ha sostituito il vecchio motore regex di Ruby piuttosto recentemente, in Ruby 1.9, quindi c'è un sacco di materiale di riferimento là fuori che non ha raggiunto il cambiamento. –

+0

@Alan, grazie - modificando la A per farlo notare. –

+2

C'è una gemma di Oniguruma per 1.8, anche se dovrai prima installare Oniguruma per poterlo usare - http://oniguruma.rubyforge.org/index.xhtml – kejadlen

10

Ruby 1.9 introdotte cattura nome:

m = /(?<prefix>[A-Z]+)(?<hyphen>-?)(?<digits>\d+)/.match("THX1138.") 
m.names # => ["prefix", "hyphen", "digits"] 
m.captures # => ["THX", "", "1138"] 
m[:prefix] # => "THX" 

È possibile utilizzare \k<prefix>, ecc, per il back-riferimenti.

+0

Sì: con il motore Oniguruma. – arnab

Problemi correlati