¿Cómo escribir una expresión regular para el análisis html?

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

Quiero hacer coincidir una etiqueta html con un atributo dado (por ej.,

con class="tab news selected" ) que contiene una o más tags . La expresión regular debe coincidir con la etiqueta completa (de

a

). Siempre parece que tengo errores de “memoria agotada”: mi progtwig probablemente toma todas las tags que puede encontrar como coincidentes.

Estoy usando las bibliotecas boost regex.

También puede encontrar útiles estas preguntas:

¿Puede proporcionar algunos ejemplos de por qué es difícil analizar XML y HTML con una expresión regular?

¿Puedes proporcionar un ejemplo de análisis de HTML con tu analizador favorito?

Probablemente deberías mirar esta pregunta re. expresiones regulares y HTML. Lo esencial es que el uso de expresiones regulares para analizar HTML no es en modo alguno una solución ideal.

Como han dicho otros, no use expresiones regulares si es posible. Si su código es en realidad XHTML (es decir, también está bien formado XML), puedo recomendar los analizadores Xerces y Expat XML, que le harán un mejor trabajo que los regex.

Tal vez las expresiones regulares no son la mejor solución, pero ya estoy usando como cinco bibliotecas diferentes y el impulso funciona bien cuando se trata de localizar tags y palabras clave .

Estoy usando estas expresiones regulares:

/[^\n]*/ /[^\n]*/ /[^\n]*/ para localizar tags y:

//searched keyword// para localizar enlaces

(Por cierto, ¿se puede hacer mejor? – Yo chupo en Regex;))

Lo que necesito ahora es ubicar tags que contengan y creo que las expresiones regulares funcionarán correctamente, tal vez necesite escribir mi propia función de análisis como dijo Piotr.

Haga lo que hace flex: combine

con una coincidencia insensible a mayúsculas y minúsculas, y ponga su analizador en un estado “div emparejado”, siga procesando la entrada hasta y restablezca el estado.

Esto toma dos expresiones regulares y una variable de estado.

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

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

Intereting Posts