2011-09-30 19 views
6

Creazione di un parser di argomenti. Voglio dividere una stringa in un array in cui il delimitatore è ", " tranne quando è preceduto da "|". Ciò significa che stringaL'aspetto negativo di Regex in Ruby non sembra funzionare

"foo, ba|, r, arg" 

dovrebbe tradursi in

`["foo", "ba|, r", "arg"]` 

Sto cercando di usare questa espressione regolare: (?<!\|), che opera in http://regexhero.net/tester/ ma quando provo

args.split(/(?<!\|), /) 

in rubino, ottengo un errore: undefined (?...) sequence: /(?<!\|), /

+1

Questo funziona in 1.9 quindi se è possibile aggiornare l'installazione di Ruby, andare avanti e farlo. –

+0

@Michael Kohl è esattamente quello che ho fatto :) – tybro0103

+0

Inoltre, per il test di regex su Ruby, userei [Rubular] (http://rubular.com/). – Pakman

risposta

10

motore di regex di Ruby non sup port lookbehind (yet).

Dovresti passare a 1.9 o usare Oniguruma.


Se questo non è un'opzione, è possibile cercare |, e sostituirlo con una sorta di marcatore. Dopo tutto è detto e fatto, rimettete il |, indietro.

Si può anche provare una regex come:

/(?:[^|]),/

Ma ovviamente il (?:[^|]) non è larghezza zero, che significa che avrete bisogno di fare qualche lavoro extra dopo.

+0

nota che Ruby ora supporta il lookbehind negativo almeno alla versione 1.9.3: http://ruby-doc.org/core-1.9.3/Regexp.html – filsa