2011-10-06 27 views
8

Tengo un problema con la coincidencia de los atributos html (en varias etiquetas html) con regex. Para ello, utilizo el patrón: fragmentoRegex - Coincidir atributo en un código HTML

myAttr=\"([^']*)\" 

HTML:

<img alt="" src="1-p2.jpg" myAttr="http://example.com" class="alignleft" /> 

selecciona texto de la myAttr final /> pero necesito para seleccionar el myAttr="..." ("http://example.com")

Respuesta

16

Tiene un apóstrofo (') dentro de su clase de personaje pero desea una cotización (").

myAttr=\"([^"]*)\" 

Dicho esto, realmente shouldn't be parsing HTML with regexes. (Perdón por vincular a que responde de nuevo. Hay otras respuestas a esa pregunta que son más de la variedad "si sabes lo que estás haciendo ...". Pero es bueno tenerlo en cuenta)

tenga en cuenta que incluso si usted limita su regexing sólo los atributos que tiene mucho que considerar:

  • tenga cuidado de no coincidir con el interior de los comentarios.
  • Tenga cuidado de no hacer coincidir el interior de las secciones de CDATA.
  • ¿Qué pasa si los atributos están entre corchetes con comillas simples en lugar de comillas dobles?
  • ¿Qué sucede si los atributos no tienen citas?

Es por eso que generalmente se requieren analizadores preconstruidos y serios.

4

El * es un cuantificador codicioso. Debe seguir con un signo de interrogación para que sea no expansivo:

myAttr=\"([^']*?)\" 
2

Si sólo desea que el parámetro myAttr valor, utilice esto:

"myAttr=\"([^\"]+)\"" 
0

puede intentar usar que

myAttr=\"?[\w:\-]+ ?= ?("[^"]+"|'[^']+'|\w+)\" 
0

< [^>] *>

Intenta esto i s esta ayuda para quitar toda la etiqueta

Ejemplo Algo

+2

¿Ha leído la pregunta? – Toto

Cuestiones relacionadas