Negando una referencia inversa en expresiones regulares
si una cadena tiene este formato predicho:
value = "hello and good morning"
Donde el "(comillas) también podría ser '(comilla simple), y el carácter de cierre (' o") será el mismo que el de apertura. Quiero hacer coincidir la cadena entre comillas.
\bvalue\s*=\s*(["'])([^\1]*)\1
(los dos \ s deben permitir cualquier espacio cerca del signo =)
El primer "grupo capturado" (dentro del primer par de paréntesis) - debe coincidir con la cita de apertura que debe ser 'o "entonces - se supone que debo permitir cualquier número de caracteres que no sean los capturados en el primer grupo , y luego espero el personaje capturado en el grupo (las comillas adjuntas).
(la cadena requerida debe capturarse en el segundo grupo de captura).
Esto no funciona sin embargo.
Esto hace
\bvalue\s*=\s*(['"])([^"']*)["']
pero quiero asegurarme de que tanto la comilla de apertura como la de cierre (doble o simple) sean las mismas.
EDITA
ásicamente, el objetivo era obtener la etiqueta de apertura de un ancla que tiene un cierto nombre de clase incluido dentro de su atributo de clase, y quería cubrir la rara ocasión del atributo de clase que incluye un (') o un (").
Siguiendo todos los consejos aquí, utilicé el patrón:
<\s*\ba\b[^<>]+\bclass\s*=\s*("|'|\\"|\\')(?:(?!\1).)*\s*classname\s*(?:(?!\1).)*\1[^>]*>
Sentid:
Encuentre una señal de etiqueta abierta.
Permitir cualquier espacio.
Encuentra elpalabr un
Permitir cualquier etiqueta que no sea de cierre.
Buscar "clase (cualquier espacio) = (cualquier espacio)"
Obtenga comillas de apertura, una de las siguientes: ("o 'o \" o \').
De la respuesta de Alan Moore: Permitir cualquier carácter que no sea la comilla de apertura.
find classname
Permitir los caracteres que no sean las comillas iniciales.
Encuentre la cotización de cierre que es igual a la apertura.
Permitir cualquier carácter de etiqueta de cierre.
Encuentre la etiqueta de cierre char.