Qu'est-ce regex correspondrait à une table imbriquée avec le texte identifiable dans la cellule du tableau?

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

  •  19-09-2019
  •  | 
  •  

Question

Qu'est-ce regex correspondre à un tableau imbriqué avec le texte identifiable dans la cellule du tableau? Je l'ai essayé, mais a échoué à trouver une expression régulière pour extraire la table spécifique que je veux avec en saisissant le début et la fin des deux tables dans l'exemple. Voici quelque chose pour commencer: « <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>

Dire que je veux extraire la table contenant « Code2 ». Qu'est-ce que regex correspondent spécifiquement et uniquement cette table?

Était-ce utile?

La solution

Le regex suivant trouverez votre table:

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

Avec (?ms) vous allumez « matchs multilignes » (m) et « point correspond à des sauts de ligne, trop » (s). Ensuite, vous avez un (?!) négatif pour lookahead vous assurer que vous avez pas de deuxième début d'une table à l'intérieur de votre correspondance.

Autres conseils

Je ne voudrais pas utiliser une expression rationnelle à ce sujet, puisque HTML n'est pas régulière, et il n'y a pas de fin de cas de pointe pour vous faire trébucher. Vous êtes mieux à l'aide d'un analyseur HTML. Quelle que soit la langue ou la plate-forme que vous utilisez, il y aura un disponible.

Ne pas utiliser une expression régulière. Utilisez un analyseur HTML!

Cependant, en Perl (en supposant que vous n'avez pas tables imbriquées):

$xml =~ /<table>.*<td>Code2<\/td>.*<\/table>/s;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top