2010-01-19 3 views
0

Je veux analyser un code HTML et créer des objets à partir de leur représentation textuelle dans une table. J'ai plusieurs colonnes et je veux enregistrer le contexte de certaines colonnes sur chaque ligne. Maintenant, j'ai le code HTML et je comprends que je devrais utiliser Pattern et Matcher pour obtenir ces chaînes, mais je ne sais pas comment écrire l'expression régulière requise.Comment écrire une expression régulière en Java qui prend en compte le contexte de la chaîne que je cherche?

Cette ligne est que je vais analyse syntaxique:

<tr><td><a href="delirium.htm">Delirium</a></td><td>65...</tr>

Alors, je veux extraire Delirium de cette chaîne. Comment puis-je écrire l'expression régulière qui SAIS

moi obtenir la chaîne qui est entre la chaîne htm"> et </a></td>

?

Répondre

4

Ceci est une question commune sur SO et la réponse est toujours la même: les expressions régulières sont un outil médiocre et limité pour analyser le HTML car HTML n'est pas un langage régulier. Vous devez utiliser an HTML parser, par exemple HTML Parser.

Si vous êtes curieux de savoir ce que je veux dire par "langue régulière", jetez un oeil à JMD, Markdown and a Brief Overview of Parsing and Compilers. Fondamentalement, une expression régulière est un DFA (automate fini déterministe ou automate fini déterministe). HTML nécessite un PDA (automate pushdown) pour analyser. Un PDA est un DFA avec une pile. C'est comme ça qu'il gère les éléments récursifs.

+0

Merci, c'est très utile. Donc, est la fonction de recherche que je ne parviens pas à utiliser récemment;) – kovike

-1
htm">(.+)</a></td> 

recherches pour tout caractère (c'est le bit .+) qui est entre htm"> et </a></td> et de retour ce qui est entre à utiliser avec Pattern.matcher() (ce qui est la raison pour laquelle il y a des crochets autour .+)

http://www.regular-expressions.info/java.html

Questions connexes