¿Qué expresiones regulares se correspondería con una tabla anidada con el texto de identificación en la celda de la tabla?

StackOverflow https://stackoverflow.com/questions/1505277

  •  19-09-2019
  •  | 
  •  

Pregunta

¿Qué expresiones regulares coincidiría con una tabla anidada con el texto de identificación en la celda de la tabla? Lo he intentado, pero no pudo llegar a una expresión regular para extraer la tabla específica que quiera con agarrar a cabo el inicio y el final de las dos tablas en el ejemplo. Aquí hay algo para empezar: "<table>.*?</table>"

<table>
    <tr>
        <td>
            <table>
                <tr><td>Code1</td></tr>
                <tr><td>some data</td></tr>
                <tr><td>etc ...</td></tr>
            </table>
        </td>
    </tr>
    <tr>
        <td>
            <table>
                <tr><td>Code2</td></tr>
                <tr><td>some data</td></tr>
                <tr><td>etc ...</td></tr>
            </table>
        </td>
    </tr>
</table>

Digamos que quiero extraer la tabla que contiene "Código2". ¿Qué expresión regular coincidirá específicamente y sólo esa mesa?

¿Fue útil?

Solución

La siguiente expresión regular encontrará la tabla:

(?ms)<table>((?!<table>).)*<td>Code2</td>.*?</table>

Con (?ms) que encienda "partidos de varias líneas" (m) y "punto coincide con saltos de línea, también" (s). Entonces usted tiene un (?!) búsqueda negativa hacia delante para asegurarse de que no tiene segunda apertura de una mesa dentro de su partido.

Otros consejos

No utilizaría una expresión regular en esto, ya que HTML no es regular, y hay un sin fin de casos extremos a tropezar. Es mejor que el uso de un analizador de HTML. Sea cual sea el idioma o la plataforma que está utilizando, no habrá uno disponible.

No utilice una expresión regular. Utilizar un analizador de HTML!

Sin embargo, en Perl (asumiendo que no tiene tablas anidadas):

$xml =~ /<table>.*<td>Code2<\/td>.*<\/table>/s;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top