No puede analizar HTML [X] con regex. Porque HTML no puede ser analizado por regex. Regex no es una herramienta que pueda usarse para analizar HTML correctamente. Como he respondido en preguntas de HTML y expresiones regulares aquí tantas veces antes, el uso de expresiones regulares no le permitirá consumir HTML. Las expresiones regulares son una herramienta que no es lo suficientemente sofisticada para comprender las construcciones empleadas por HTML. HTML no es un lenguaje regular y, por lo tanto, no se puede analizar mediante expresiones regulares. Las consultas de expresiones regulares no están equipadas para dividir HTML en sus partes significativas. muchas veces pero no me está afectando. Incluso las expresiones regulares irregulares mejoradas que usa Perl no están a la altura de analizar HTML. Nunca me harás romper. HTML es un lenguaje de suficiente complejidad que no puede ser analizado por expresiones regulares. Incluso Jon Skeet no puede analizar HTML usando expresiones regulares. Cada vez que intentas analizar HTML con expresiones regulares, el niño impío llora la sangre de las vírgenes y los hackers rusos tiran tu aplicación web. Analizar HTML con expresiones regulares convoca a almas contaminadas en el reino de los vivos. HTML y regex van juntos como el amor, el matrimonio y el infanticidio ritual. El <centro> no puede contenerlo, es demasiado tarde. La fuerza de expresiones regulares y HTML juntas en el mismo espacio conceptual destruirá tu mente como una masilla acuosa. Si analizas HTML con regex, te estás entregando a Ellos y sus formas blasfemas que nos condenan a todos a un trabajo inhumano para Aquel cuyo Nombre no puede expresarse en el Plano Multilingüe Básico, él viene. HTML-plus-regexp licuará las nervios del sensible mientras observas, tu psique se marchita en la embestida del horror.es demasiado tarde, es demasiado tarde, no podemos salvarnos, la transgresión de un niño asegura que la expresión regular consumirá todo el tejido vivo (excepto HTML, que no puede, como se profetizó anteriormente), querido señor, ayúdenos a cómo puede alguien sobrevivir a este flagelo usando expresiones regulares para analizar HTML ha condenado a la humanidad a una eternidad de agujeros de tortura y de seguridad terribles utilizando Rege x como una herramienta para HTML proceso establece una bebida en ch entre este mundo y el reino temor de entidades corruptos (como entidades SGML, pero más corrupto) un mero Glimp se de el mundo de la reg ex analizadores de HTML ins tantly transporte ap conciencia de rogrammer i nto aw ORL d incesante de gritar, que viene, El pestilente sl ithy expresiones regulares infección Wil l devoran HT analizador ML, la aplicación y la existencia de todos los tiempos como Visual Basic sólo peor venga, com es hacer no fi lucha h e viene, HI s UNHOLY Resplandor de stro҉ying toda la iluminación, las etiquetas HTML con fugas fr̶ǫm ur yo ojos como líq uido p ain, el canto de regulares exp re análisis de fisión se eXTI nguish las voces de mor hombre Tal desde el sp aquí puedo ver que se puede ver TI es hermoso t él f inal snuf
Fing o f la mentira es del hombre que todo está perdido A LL I SLOST XX e Pony que venga s que com es él co me s t él ich o permeat es al l MI FAC E MI CARA ᵒh dios N o NO NOO O EN Θ parada t que un ̶͑̾̾ * GL eS ͎a̧͈͖r̽̾̈́͒͑e
n ot rè̑ͧ̌aͨl̘̝̙̃ͤ͂̾̆ ZA̡͊͠͝LGΌ ISͮ̂҉̯͈͕̹̘̱ T O͇̹̺ͅƝ̴ȳ̳ TH̘ Ë͖́̉ ͠P̯͍̭O̚ N̐Y̡ H̸̡̪̯ͨ͊̽̅̾̎Ȩ̬̩̾͛ͪ̈́̀́͘ ̶̧̨̱̹̭̯ͧ̾ͬC̷̙̲̝͖ͭ̏ͥͮ͟Oͮ͏̮̪̝͍M̲̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌͝ S̨̥̫͎̭ͯ̿̔̀ͅ
¿Has intentado usar un analizador XML?
Nota del moderador
Esta publicación está bloqueada para evitar ediciones inapropiadas de su contenido. La publicación se ve exactamente como se supone que debe verse: no hay problemas con su contenido. Por favor, no lo marque para nuestra atención.
Si bien el HTML arbitrario con solo una expresión regular es imposible, a veces es apropiado usarlos para analizar un conjunto limitado y conocido de HTML.
Si tiene un pequeño conjunto de páginas HTML de las que desea extraer datos y luego introducirlos en una base de datos, las expresiones regulares podrían funcionar bien. Por ejemplo, hace poco quería obtener los nombres, partidos y distritos de los representantes federales australianos, que obtuve del sitio web del Parlamento. Este era un trabajo limitado, de una sola vez.
Regexes funcionó bien para mí y fue muy rápido de configurar.
fuente
&foo;
codificaciones yCDATA
secciones? ¿Usa un minificador HTML para eliminar todos los espacios en blanco en su documento que el navegador no representa? Un analizador XML no le importará, y tampoco una declaración XPath bien escrita. Un "analizador" basado en expresiones regulares, por otro lado ...<font>
etc .: sin clases o ID para ayudar a navegar el DOM. Después de luchar todo el día con el enfoque "correcto", finalmente cambié a una solución de expresiones regulares y la hice funcionar en una hora.Creo que la falla aquí es que HTML es una gramática Chomsky Tipo 2 (gramática libre de contexto) y RegEx es una gramática Chomsky Tipo 3 (gramática regular) . Dado que una gramática tipo 2 es fundamentalmente más compleja que una gramática tipo 3 (consulte la jerarquía de Chomsky ), es matemáticamente imposible analizar XML con RegEx.
Pero muchos lo intentarán, algunos incluso reclamarán el éxito, pero hasta que otros encuentren la falla y lo arruinen por completo.
fuente
A -> s A e
). (X) HTML no tiene esta propiedad dentro de una etiqueta de inicio: una etiqueta de inicio no puede contener otras etiquetas de inicio. El subconjunto que el OP está tratando de analizar no es un CFG.No escuches a estos tipos. Que está en completo puede analizar gramáticas libres de contexto con expresiones regulares si se rompe la tarea en partes más pequeñas. Puede generar el patrón correcto con un script que haga cada uno de estos en orden:
No he terminado la última parte yo mismo, pero sé que me estoy acercando. Sigue arrojando
CthulhuRlyehWgahnaglFhtagnException
s por alguna razón, así que voy a portarlo a VB 6 y usarloOn Error Resume Next
. Actualizaré con el código una vez que investigue esta extraña puerta que se acaba de abrir en la pared. HmmEl PS Pierre de Fermat también descubrió cómo hacerlo, pero el margen en el que estaba escribiendo no era lo suficientemente grande para el código.
fuente
Descargo de responsabilidad : use un analizador si tiene la opción. Dicho eso ...
Esta es la expresión regular que uso (!) Para hacer coincidir las etiquetas HTML:
Puede que no sea perfecto, pero ejecuté este código a través de mucho HTML. Tenga en cuenta que incluso atrapa cosas extrañas como las
<a name="badgenerator"">
que aparecen en la web.Supongo que para que no coincida con las etiquetas autocontenidas, querrás usar el aspecto negativo de Kobi :
o simplemente combinar si y si no.
Para downvoters: este es el código de trabajo de un producto real. Dudo que cualquiera que lea esta página tenga la impresión de que es socialmente aceptable usar expresiones regulares en HTML.
Advertencia : debo tener en cuenta que esta expresión regular todavía se rompe en presencia de bloques CDATA, comentarios y elementos de script y estilo. La buena noticia es que puedes deshacerte de aquellos que usan una expresión regular ...
fuente
<!doctype html><title><</title>
.'<!doctype html><title><</title>'.match(/<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])+>/g)
Retornos simples["<!doctype html>", "<title>", "<</title>"]
mientras debería["<title>", "</title>"]
.Hay personas que le dirán que la Tierra es redonda (o tal vez que la Tierra es un esferoide achatado si quieren usar palabras extrañas). Están mintiendo.
Hay personas que le dirán que las expresiones regulares no deberían ser recursivas. Te están limitando. Necesitan subyugarlo, y lo hacen manteniéndolo en la ignorancia.
Puedes vivir en su realidad o tomar la píldora roja.
Al igual que Lord Marshal (es que un familiar de la clase Marshal .NET?), He visto el
UnderversePila basado en expresiones regulares-verso y regresó conpoderesconocimiento no se puede imaginar. Sí, creo que había uno o dos viejos protegiéndolos, pero estaban viendo fútbol en la televisión, así que no fue difícil.Creo que el caso XML es bastante simple. El RegEx (en la sintaxis .NET), desinflado y codificado en base64 para que sea más fácil de comprender por su débil mente, debería ser algo como esto:
Las opciones para configurar es
RegexOptions.ExplicitCapture
. El grupo de captura que está buscando esELEMENTNAME
. Si el grupo de capturaERROR
no está vacío, se produjo un error de análisis y Regex se detuvo.Si tiene problemas para reconvertirlo en una expresión regular legible por humanos, esto debería ayudar:
Si no estás seguro, no, NO estoy bromeando (pero tal vez estoy mintiendo). Funcionará. He construido toneladas de pruebas unitarias para probarlo, e incluso he usado (parte de) las pruebas de conformidad . Es un tokenizador, no un analizador completo, por lo que solo dividirá el XML en sus tokens componentes. No analizará / integrará DTD.
Oh ... si quieres el código fuente de la expresión regular, con algunos métodos auxiliares:
regex para tokenizar un xml o la regex simple
fuente
En shell, puede analizar HTML usando sed :
Relacionado (por qué no debe usar la coincidencia de expresiones regulares):
fuente
Estoy de acuerdo en que la herramienta correcta para analizar XML y especialmente HTML es un analizador y no un motor de expresión regular. Sin embargo, como otros han señalado, a veces usar una expresión regular es más rápido, más fácil y hace el trabajo si conoce el formato de datos.
Microsoft en realidad tiene una sección de Mejores prácticas para expresiones regulares en .NET Framework y habla específicamente sobre Considerar la fuente de entrada .
Las expresiones regulares tienen limitaciones, pero ¿ha considerado lo siguiente?
El marco .NET es único cuando se trata de expresiones regulares en el sentido de que admite definiciones de grupos de equilibrio .
Por esta razón, creo que PUEDES analizar XML usando expresiones regulares. Sin embargo, tenga en cuenta que debe ser XML válido (los navegadores son muy indulgentes con HTML y permiten una sintaxis XML incorrecta dentro de HTML ). Esto es posible ya que la "Definición de grupo de equilibrio" permitirá que el motor de expresión regular actúe como un PDA.
Cita del artículo 1 citado anteriormente:
Considere la siguiente expresión regular:
Usa las banderas:
Expresión regular explicada (en línea)
Puede probar esto en A Better .NET Regular Expression Tester .
Usé la fuente de muestra de:
Esto encontró el partido:
aunque en realidad salió así:
Por último, realmente disfruté el artículo de Jeff Atwood: Parsing Html The Cthulhu Way . Curiosamente, cita la respuesta a esta pregunta que actualmente tiene más de 4k votos.
fuente
System.Text
no es parte de C #. Es parte de .NET.(?=<ul\s*id="matchMe"\s*type="square"\s*>) # match start with <ul id="matchMe"...
), entre "<ul" e "id" debe estar\s+
, no\s*
, a menos que desee que coincida con <ulid = ...;)\s+
lugar de\s*
.<img src="images/pic.jpg" />
/
lugar dentro que falló para su<img src="images/pic.jpg" />
html.Sugiero usar QueryPath para analizar XML y HTML en PHP. Básicamente es la misma sintaxis que jQuery, solo que está en el lado del servidor.
fuente
Si bien las respuestas de que no puede analizar HTML con expresiones regulares son correctas, no se aplican aquí. El OP solo quiere analizar una etiqueta HTML con expresiones regulares, y eso es algo que se puede hacer con una expresión regular.
Sin embargo, la expresión regular sugerida es incorrecta:
Si agrega algo a la expresión regular, al retroceder puede verse obligado a coincidir con cosas tontas como
<a >>
,[^/]
es demasiado permisivo. También tenga en cuenta que<space>*[^/]*
es redundante, porque[^/]*
también puede coincidir con espacios.Mi sugerencia seria
Dónde
(?<! ... )
está (en expresiones regulares de Perl) la mirada negativa hacia atrás. Se lee "a <, luego una palabra, luego todo lo que no sea un>, el último de los cuales puede no ser un /, seguido de>".Tenga en cuenta que esto permite cosas como
<a/ >
(al igual que la expresión regular original), por lo que si desea algo más restrictivo, debe crear una expresión regular para que coincida con los pares de atributos separados por espacios.fuente
>
carácter. Estoy de acuerdo con lo que OP sugiere que se puede hacer con una expresión regular, pero la presentada aquí es muy simplista.Tratar:
Es similar al tuyo, pero el último
>
no debe ser después de una barra oblicua, y también aceptah1
.fuente
>
símbolo se escapó correctamente a & gt ;.>
es válido en un valor de atributo. De hecho, en la serialización 'canonical XML' no debe usar>
. (Lo cual no es del todo pertinente, salvo destacar que>
en un valor de atributo no es en absoluto una cosa inusual.)<div title="this tag is a <div></div>">hello</div>
Sun Tzu, un antiguo estratega, general y filósofo chino, dijo:
En este caso, tu enemigo es HTML y tú eres tú o regex. Incluso podrías ser Perl con expresiones regulares irregulares. Saber HTML. Conocete a ti mismo.
He compuesto un haiku que describe la naturaleza de HTML.
También he compuesto un haiku que describe la naturaleza de la expresión regular en Perl.
fuente
Salida:
Básicamente, solo defina los nombres de nodo de elemento que se cierran automáticamente, cargue toda la cadena html en una biblioteca DOM, tome todos los elementos, repita y filtre los que no se cierran automáticamente y opere en ellos.
Estoy seguro de que ya sabes que no deberías usar regex para este propósito.
fuente
NS
y especifique el espacio de nombres.No sé cuál es su necesidad exacta de esto, pero si también está usando .NET, ¿no podría usar Html Agility Pack ?
Extracto:
fuente
Desea que el primero
>
no sea precedido por a/
. Mire aquí para obtener detalles sobre cómo hacerlo. Se conoce como mirar hacia atrás negativo.Sin embargo, una implementación ingenua de eso terminará coincidiendo
<bar/></foo>
en este documento de ejemplo¿Puede proporcionar un poco más de información sobre el problema que está tratando de resolver? ¿Estás iterando a través de etiquetas programáticamente?
fuente
El W3C explica el análisis en forma de pseudo regexp:
Enlace W3C
Siga los enlaces para var
QName
,S
yAttribute
para obtener una imagen más clara.En base a eso, puede crear una expresión regular bastante buena para manejar cosas como quitar etiquetas.
fuente
Si necesita esto para PHP:
Las funciones DOM de PHP no funcionarán correctamente a menos que tenga el formato XML correcto. No importa cuán mejor sea su uso para el resto de la humanidad.
simplehtmldom es bueno, pero lo encontré un poco defectuoso, y tiene bastante memoria [se bloqueará en páginas grandes].
Nunca he usado querypath , así que no puedo comentar sobre su utilidad.
Otro para probar es mi DOMParser, que es muy ligero en recursos y he estado usando felizmente por un tiempo. Simple de aprender y poderoso.
Para Python y Java, se publicaron enlaces similares.
Para los downvoters: solo escribí mi clase cuando los analizadores XML no pudieron soportar el uso real. El voto negativo religioso simplemente evita que se publiquen respuestas útiles: mantenga las cosas dentro de la perspectiva de la pregunta, por favor.
fuente
Aquí está la solución:
Para probarlo profundamente, ingresé en la cadena etiquetas de cierre automático como:
También ingresé etiquetas con:
Si encuentra algo que no funciona en la prueba de concepto anterior, estoy disponible para analizar el código para mejorar mis habilidades.
<EDIT> Olvidé que la pregunta del usuario era evitar el análisis de etiquetas de cierre automático. En este caso, el patrón es más simple, convirtiéndose en esto:
El usuario @ridgerunner notó que el patrón no permite atributos sin comillas o atributos sin valor . En este caso, un ajuste fino nos trae el siguiente patrón:
</EDIT>
Comprender el patrón
Si alguien está interesado en aprender más sobre el patrón, proporciono alguna línea:
Pequeño consejo: para analizar mejor este código es necesario mirar el código fuente generado ya que no proporcioné ningún carácter especial de HTML que se escape.
fuente
<option selected>
. Tampoco coincide con etiquetas válidas con valores de atributo sin comillas, es decir<p id=10>
.< a href="http://wtf.org" >
? Estoy bastante seguro de que es legal, pero no coincide.Siempre que necesito extraer rápidamente algo de un documento HTML, uso Tidy para convertirlo a XML y luego uso XPath o XSLT para obtener lo que necesito. En su caso, algo como esto:
fuente
Utilicé una herramienta de código abierto llamada HTMLParser antes. Está diseñado para analizar HTML de varias maneras y cumple bastante bien el propósito. Puede analizar HTML como un treenode diferente y puede usar fácilmente su API para obtener atributos del nodo. Compruébelo y vea si esto puede ayudarlo.
fuente
Me gusta analizar HTML con expresiones regulares. No intento analizar HTML idiota que está roto deliberadamente. Este código es mi analizador principal (edición Perl):
Se llama htmlsplit, divide el HTML en líneas, con una etiqueta o fragmento de texto en cada línea. Las líneas se pueden procesar aún más con otras herramientas de texto y scripts, como grep , sed , Perl, etc. Ni siquiera estoy bromeando :) Disfruta.
Es lo suficientemente simple como para reiniciar mi script de Perl slurp-everything-first en una buena transmisión, si deseas procesar enormes páginas web. Pero no es realmente necesario.
Apuesto a que me votarán por esto.
División HTML
Contra mi expectativa, esto obtuvo algunos votos positivos, por lo que sugeriré algunas expresiones regulares mejores:
Son buenos para XML / XHTML.
Con pequeñas variaciones, puede hacer frente a HTML desordenado ... o convertir el HTML -> XHTML primero.
La mejor manera de escribir expresiones regulares es en el estilo Lex / Yacc , no como líneas opacas o monstruosidades de varias líneas comentadas. Todavía no hice eso aquí; estos apenas lo necesitan.
fuente
/(\w+)="(.*?)"/
asume comillas dobles. Perderá valores en comillas simples. En html versión 4 y anteriores, se permite el valor sin comillas, si es una palabra simple./(\w+)="(.*?)"/
puede coincidir falsamente con el texto que parece un atributo dentro de un atributo, por ejemplo<img title="Nope down='up' for aussies" src="..." />
. Si se aplica globalmente, también coincidirá en el texto ordinario o en comentarios html.Aquí hay un analizador basado en PHP que analiza HTML usando algunas expresiones regulares impías. Como autor de este proyecto, puedo decirle que es posible analizar HTML con expresiones regulares, pero no eficiente. Si necesita una solución del lado del servidor (como lo hice para mi plugin wp-Typography WordPress ), esto funciona.
fuente
Hay algunas expresiones regulares agradables para reemplazar HTML con BBCode aquí . Para todos los que no lo dicen, tenga en cuenta que no está tratando de analizar HTML completamente, solo para desinfectarlo. Probablemente puede permitirse matar etiquetas que su simple "analizador" no puede entender.
Por ejemplo:
fuente
Sobre la cuestión de los métodos RegExp para analizar (x) HTML, la respuesta a todos los que hablaron sobre algunos límites es: no se ha entrenado lo suficiente como para gobernar la fuerza de esta poderosa arma, ya que NADIE aquí habló sobre la recursividad .
Un colega independiente de RegExp me notificó esta discusión, que ciertamente no es la primera en la web sobre este tema antiguo y candente.
Después de leer algunas publicaciones, lo primero que hice fue buscar la cadena "? R" en este hilo. El segundo fue buscar sobre "recursividad".
No, vaca sagrada, no se ha encontrado ninguna coincidencia.
Como nadie mencionó el mecanismo principal en el que se basa un analizador sintáctico, pronto me di cuenta de que nadie entendió el punto.
Si un analizador (x) HTML necesita recurrencia, un analizador RegExp sin recurrencia no es suficiente para este propósito. Es una construcción simple.
El arte negro de RegExp es difícil de dominar , por lo que tal vez hay más posibilidades que dejamos de lado al intentar y probar nuestra solución personal para capturar toda la web con una mano ... Bueno, estoy seguro de eso :)
Aquí está el patrón mágico:
Solo inténtalo.
Está escrito como una cadena PHP, por lo que el modificador "s" hace que las clases incluyan nuevas líneas.
Aquí hay una nota de muestra sobre el manual de PHP que escribí en enero: Referencia
(Tenga cuidado, en esa nota utilicé erróneamente el modificador "m"; debe borrarse, a pesar de que el motor RegExp lo descarta, ya que no se utilizó el anclaje ^ o $).
Ahora, podríamos hablar sobre los límites de este método desde un punto de vista más informado:
De todos modos, es solo un patrón RegExp, pero revela la posibilidad de desarrollar muchas implementaciones potentes.
Escribí este patrón para potenciar el analizador de descenso recursivo de un motor de plantillas que construí en mi marco, y el rendimiento es realmente excelente, tanto en tiempos de ejecución como en el uso de memoria (nada que ver con otros motores de plantillas que usan la misma sintaxis).
fuente
Como muchas personas ya han señalado, el HTML no es un lenguaje normal que puede dificultar el análisis. Mi solución a esto es convertirlo en un lenguaje normal usando un programa ordenado y luego usar un analizador XML para consumir los resultados. Hay muchas buenas opciones para esto. Mi programa está escrito usando Java con la biblioteca jtidy para convertir el HTML en XML y luego Jaxen a xpath en el resultado.
fuente
Las partes explicaron:
<
: personaje inicial\s*
: puede tener espacios en blanco antes del nombre de la etiqueta (feo pero posible).(\w+)
: las etiquetas pueden contener letras y números (h1). Bueno,\w
también coincide con '_', pero no duele, supongo. Si tiene curiosidad, use ([a-zA-Z0-9] +) en su lugar.[^/>]*
: cualquier cosa excepto>
y/
hasta el cierre>
>
: clausura>
NO RELACIONADO
Y a los tipos que subestiman las expresiones regulares que dicen que son tan poderosas como los idiomas normales:
un n ba n ba n que no es regular y ni siquiera está libre de contexto, se puede combinar con
^(a+)b\1b\1$
¡Referencia inversa FTW !
fuente
O(MN)
(M es la longitud de la expresión regular, N es la longitud del texto). Las referencias inversas son una de las causas de eso. La implementación en awk no tiene referencias y coincide con todo dentro delO(MN)
tiempo.Si simplemente está tratando de encontrar esas etiquetas (sin ambiciones de análisis), pruebe esta expresión regular:
Lo escribí en 30 segundos y probé aquí: http://gskinner.com/RegExr/
Coincide con los tipos de etiquetas que mencionó, mientras que ignora los tipos que dijo que quería ignorar.
fuente
\/>
lugar de\\>
.\>
eso es lo que quise decir; Nunca quise editar la expresión regular de mi publicación original.\/
, ya que eso haría exactamente lo contrario de los requisitos. Tal vez pensé que estabas ofreciendo un patrón de filtro negativo.Me parece que estás tratando de hacer coincidir las etiquetas sin una "/" al final. Prueba esto:
fuente
Es cierto que, cuando se programa, generalmente es mejor usar analizadores y API dedicados en lugar de expresiones regulares cuando se trata de HTML, especialmente si la precisión es primordial (por ejemplo, si su procesamiento podría tener implicaciones de seguridad). Sin embargo, no atribuyo a una vista dogmática que el marcado de estilo XML nunca debe procesarse con expresiones regulares. Hay casos en que las expresiones regulares son una gran herramienta para el trabajo, como cuando se realizan ediciones únicas en un editor de texto, se corrigen archivos XML rotos o se tratan formatos de archivo que se ven pero no son XML. Hay algunos problemas a tener en cuenta, pero no son insuperables ni necesariamente relevantes.
Una expresión regular simple como
<([^>"']|"[^"]*"|'[^']*')*>
suele ser lo suficientemente buena, en casos como los que acabo de mencionar. Es una solución ingenua, considerando todo, pero permite correctamente>
símbolos no codificados en los valores de los atributos. Si está buscando, por ejemplo, unatable
etiqueta, puede adaptarla como</?table\b([^>"']|"[^"]*"|'[^']*')*>
.Solo para dar una idea de cómo sería una expresión regular HTML más "avanzada", lo siguiente hace un trabajo bastante respetable al emular el comportamiento del navegador del mundo real y el algoritmo de análisis HTML5:
Lo siguiente coincide con una definición bastante estricta de etiquetas XML (aunque no tiene en cuenta el conjunto completo de caracteres Unicode permitidos en los nombres XML):
Por supuesto, estos no tienen en cuenta el contexto circundante y algunos casos extremos, pero incluso tales cosas podrían tratarse si realmente quisiera (por ejemplo, buscando entre las coincidencias de otra expresión regular).
Al final del día, use la herramienta más adecuada para el trabajo, incluso en los casos en que esa herramienta sea una expresión regular.
fuente
Aunque no es adecuado y efectivo usar expresiones regulares para ese propósito, a veces las expresiones regulares brindan soluciones rápidas para problemas simples de coincidencia y, en mi opinión, no es tan horrible usar expresiones regulares para trabajos triviales.
Hay una publicación de blog definitiva sobre la coincidencia de elementos HTML más internos escrita por Steven Levithan.
fuente