Pregunta

Estoy intentando escribir una expresión regular para mi analizador html.

Quiero hacer coincidir una etiqueta html con un atributo dado (por ejemplo. <div> con class="tab news selected" ) que contiene uno o más <a href> etiquetas.La expresión regular debe coincidir con toda la etiqueta (desde <div> a </div>).Parece que siempre recibo errores de "memoria agotada": mi programa probablemente toma todas las etiquetas que puede encontrar como coincidentes.

Estoy usando bibliotecas boost de expresiones regulares.

Otros consejos

Probablemente debería mirar a esta pregunta volver. expresiones regulares y HTML. Lo esencial es que el uso de expresiones regulares para analizar HTML no es de ninguna manera una solución ideal.

Como otros han dicho, no utilice expresiones regulares, si es posible. Si el código es en realidad XHTML (es decir, que también es un formato XML) IA puede recomendar tanto las Xerces y expatriado analizadores XML, que hará un trabajo mucho betterv para usted que las expresiones regulares.

Tal vez las expresiones regulares no son la mejor solución, pero ya estoy usando como cinco bibliotecas diferentes y impulso hace bien cuando se trata de localizar etiquetas <a href> y palabras clave.

Estoy usando estas expresiones regulares:

/<a[^\n]*/searched attribute/[^\n]*>[^\n]*</a>/ para localizar etiquetas <a href> y:

/<a[^\n]*href[[^\n]*>/searched keyword/</a>/ para la localización de enlaces

(Por cierto que puede hacerse mejor - soy muy malo en expresiones regulares;?))

Lo que necesito ahora es la localización de las etiquetas que contienen <a href> de expresiones regulares y creo que va a hacer bien - tal vez voy a tener que escribir mi propia función de análisis como dijo Piotr.

Haz lo que hace flex:haga coincidir <div> con una coincidencia que no distinga entre mayúsculas y minúsculas y coloque su analizador en un estado "div coincidente", siga procesando la entrada hasta </div> y restablezca el estado.

Esto requiere dos expresiones regulares y una variable de estado.

Los caracteres válidos de las etiquetas SGML son [A-Za-z_:]

Entonces:/<[A-Za-z_:]+>/ coincide con una etiqueta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top