2010-03-23 17 views
7

Sé que ya hay muchas preguntas como la mía, pero no encontré ninguna respuesta que funcione en Java. Entonces escribo una nueva pregunta.Regex de Java para hacer coincidir cadena entre comillas escapadas

que tienen archivos de texto con el contenido de la siguiente manera:

 
key1 = "This is a \"test\" text with escapes using '\\' characters"; 
key2 = 'It must work with \'single\' quotes and "double" quotes'; 

necesito una expresión regular que coincide con los valores de las comillas dobles (o comillas simples). Esta expresión regular debe admitir las comillas escapadas y las barras diagonales inversas escapadas. La expresión regular debe funcionar con las clases estándar Pattern/Matcher de Java.

+0

Estrechamente relacionado, puede ser útil: http://stackoverflow.com/questions/263985/regex-question -one-or-more-spaces-outside-of-a-quote-closed-block-of-text –

Respuesta

8

Pruebe esta expresión regular:

'([^\\']+|\\([btnfr"'\\]|[0-3]?[0-7]{1,2}|u[0-9a-fA-F]{4}))*'|"([^\\"]+|\\([btnfr"'\\]|[0-3]?[0-7]{1,2}|u[0-9a-fA-F]{4}))*" 

Y como una cadena literal:

"'([^\\\\']+|\\\\([btnfr\"'\\\\]|[0-3]?[0-7]{1,2}|u[0-9a-fA-F]{4}))*'|\"([^\\\\\"]+|\\\\([btnfr\"'\\\\]|[0-3]?[0-7]{1,2}|u[0-9a-fA-F]{4}))*\"" 
+1

Parece que funciona hasta ahora, gracias. – kayahr

+0

Crikey, eso es una expresión regular y media. ¿Acabas de inventar esto, o es algo que has usado por un período de tiempo? (Por ejemplo, ¿qué tan bien probado dirías que es?) –

+0

@OP: Parece que está diseñado para procesar cadenas de Java y similares (maneja escapes Unicode como '\ u1234', por ejemplo, y el habitual Java' \ f' , '\ t' y tal). Solo mencionémoslo en caso de que los datos de origen sean ligeramente diferentes, ya que en realidad no dijo que las cadenas estaban en el estilo de Java, solo que pueden tener comillas salientes y barras invertidas. De hecho, me parece que sus cadenas son JavaScript (que tienen casi la misma sintaxis que las cadenas de Java, por lo que probablemente esté bien). –

Cuestiones relacionadas