2010-03-11 3 views
-1

j'ai cette balise comme balise d'entrée:Quel est le modèle Regex pour tag html dans Java ou Android?

<a href="controller.jsp?sid=127490C88DB5&R=35144" class="11-link-dkred-bold"><b>Mr. John Q. Anderson&nbsp;&nbsp;&nbsp;MBA 1977 E</a> 

dans ce que je veux obtenir la valeur

M. John Q. Anderson       MBA 1977 E

wat est la valeur patten pour ceci dans regex?

+6

N'utilisez pas regex pour analyser le code HTML. Utilisez un analyseur HTML. De plus, qu'essayez-vous d'accomplir pour extraire cette information? –

+2

la meilleure regex est 'Pattern.compile (" Tout simplement pas! ");';) – sfussenegger

+1

Est l'exemple de balise tout ce qui est dans la chaîne, ou la chaîne que vous correspondez à contenir une page entière de HTML qui comprend cette étiquette? Si la chaîne contient le code HTML d'une page entière, y a-t-il plus d'une occurrence des données que vous essayez d'extraire dans le code HTML? Avez-vous déjà essayé de résoudre ce problème? Si oui, quels sont les problèmes que vous rencontrez? –

Répondre

8

Il est un très mauvaise idéeTM pour analyser HTML en utilisant des expressions régulières, car il est pas une langue régulière. Il est préférable d'exécuter ceci par le biais d'un nettoyage (pour le nettoyer), puis d'utiliser un analyseur XML ou d'utiliser XPath.

Sinon, le modèle correspondant avec des captures est:

<.*?>\([^<]+\)</.*?> 

EDIT

Je viens de remarquer que votre HTML est pas bien formé! Vous n'avez pas de balise de fermeture </b>. L'expression rationnelle que je vous ai donnée ne fonctionnera que si vous marquez votre texte. Cela ne marchera pas pour votre exemple. En supposant que vous aurez toujours une étiquette à l'intérieur <b>...</b> vous pouvez faire:

<.*?><b>\([^<]+\)</b></.*?> 
2

Je suggère d'utiliser NekoHTML ou d'une autre, voir par exemple Si vous voulez l'analyser vous-même, utilisez ANTLR ou JavaCC ou quelque chose de similaire. Pour le faire correctement, vous avez besoin d'une grammaire puissante.

Questions connexes