que tienen la siguiente expresión regular: (["'])(\\\1|[^\1])+\1
¿Es posible la negación del grupo Java RegExp?
Obviamente no podría compilarse porque es [^\1]
illeagal.
¿Es posible anular un grupo coincidente?
que tienen la siguiente expresión regular: (["'])(\\\1|[^\1])+\1
¿Es posible la negación del grupo Java RegExp?
Obviamente no podría compilarse porque es [^\1]
illeagal.
¿Es posible anular un grupo coincidente?
No se pueden usar referencias hacia atrás en una clase de caracteres positiva o negativa.
Pero se puede lograr lo que desea utilizando negativo lookahead assertions:
(["'])(?:\\.|(?!\1).)*\1
Explicación:
(["']) # Match and remember a quote.
(?: # Either match...
\\. # an escaped character
| # or
(?!\1) # (unless that character is identical to the quote character in \1)
. # any character
)* # any number of times.
\1 # Match the corresponding quote.
Comentó en la otra pregunta que no funcionaría. ¿Qué tal '([" ']) (\\\ 1 |.) +? \ 1'? ¿No se supone que la alternancia se corresponde de izquierda a derecha? ¿O estoy perdiendo el problema aquí? Parece estar bien en JavaScript –
@FelixKling: Tienes razón. Mover el paréntesis al lugar correcto resuelve el problema. Veamos si podemos recuperar la respuesta de Ademiban. –
Votado para recuperar. Tu solución probablemente sea aún mejor ya que evita retroceder. –
¿Cuál es el texto que está intentando establecer la concordancia? Tu expresión regular es un poco confusa. – beerbajay
La pregunta es, ¿es posible en otros sabores/idiomas? Podría imaginar que tal construcción no tiene sentido ya que un grupo de captura puede contener más de un personaje, por lo que '[^ \ 1]' sería una lista de estos personajes ... pero esta es solo mi opinión. También podría ser simplemente que el motor de expresiones regulares debe saber * de antemano * qué caracteres esperar. Funciona '[\ 1]'? –
Solo encontré esto en ['regular-expression.info'] (http://www.regular-expressions.info/brackets.html): *" Las referencias hacia atrás tampoco se pueden usar dentro de una clase de caracteres. El '\ 1' en expresiones regulares como '(a) [\ 1b]' se interpretará como un escape octal en la mayoría de los sabores de expresiones regulares. Así que esta expresión regular coincidirá con una 'a' seguida de '\ x01' o una' b'. "* Si quiero tener más información sobre las expresiones regulares, sugiero [* Mastering Regular Expressions * de Jeffrey Friedl] (http://shop.oreilly.com/product/9780596528126.do). –