2011-09-30 17 views
6

Hacer un analizador de argumentos. Quiero dividir una cadena en una matriz donde el delimitador es ", " excepto cuando va precedido de "|". Eso significa que la cadenaEl aspecto negativo de Regex en Ruby no parece funcionar

"foo, ba|, r, arg" 

debería resultar en

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

Estoy tratando de utilizar esta expresión regular: (?<!\|), que trabaja en http://regexhero.net/tester/ pero cuando intento

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

en Ruby, me sale un error: undefined (?...) sequence: /(?<!\|), /

+1

Esto funciona en 1.9 así que si puede actualizar su instalación de Ruby, siga adelante y hágalo. –

+0

@Michael Kohl eso es exactamente lo que hice :) – tybro0103

+0

Además, para las pruebas de Ruby regex, usaría [Rubular] (http://rubular.com/). – Pakman

Respuesta

10

Ruby's regex engine no sup port lookbehind (todavía).

Necesitará cambiar a la versión 1.9 o usar Oniguruma.


Si eso no es una opción, puede buscar |, y reemplazarlo con algún tipo de marcador. Después de todo lo dicho y hecho, ponga el |, de vuelta.

También puede tratar como una expresión regular:

/(?:[^|]),/

Pero, obviamente, la (?:[^|]) no es de anchura cero, lo que significa que tendrá que hacer algún trabajo extra después.

+0

tenga en cuenta que Ruby ahora es compatible con lookbehind negativo al menos a partir de 1.9.3: http://ruby-doc.org/core-1.9.3/Regexp.html – filsa

Cuestiones relacionadas