2010-05-27 6 views
0
String s= "(See <a href=\"/wiki/Grass_fed_beef\" title=\"Grass fed beef\" " + 
      "class=\"mw-redirect\">grass fed beef.) They have been used for " + 
      "<a href=\"/wiki/Paper\" title=\"Paper\">paper-making since " + 
      "2400 BC or before."; 

Dans la chaîne ci-dessus j'ai mélangé html avec du texte.Expressions régulières en Java

Eh bien l'exigence est que la sortie ressemble à: -

Ils ont été utilisés pour la fabrication du papier depuis 2400 avant JC ou avant.

Quelqu'un pourrait m'aider avec une expression régulière générique qui produirait la sortie désirée de l'entrée donnée?

Merci d'avance!

+3

(s'enfuit en criant) – ZoogieZork

Répondre

1

L'expression suivante:

\([^)]*?\)|<[a-zA-Z/][^>]*?> 

va correspondre à quelque chose qui ressemble à une balise HTML et le texte entre parenthèses. Remplacer ce texte par "", et voilà.

Note: Si vous essayez de faire correspondre une chaîne qui a des balises de script dans, ou « HTML » où l'auteur n'a pas pris la peine d'échapper <et> quand ils ne sont pas utilisés comme délimiteurs tag), ou a (sans), les choses ne marcheront probablement pas comme vous l'auriez espéré.

+0

Merci beaucoup pour votre aide. Je suis désolé pour tout inconvénient avec la façon dont j'ai formulé ma question. Mais je vous remercie de votre compréhension. Je ferai en sorte de mieux définir mes objectifs la prochaine fois. Si ce n'est pas trop gênant, je n'arrive pas à comprendre comment cette expression régulière fait le tour. Serait-il possible de le décomposer? Si non, ça va aussi, je vais essayer de comprendre. Merci encore pour votre aide. –

+1

Il s'agit en fait de deux parties. Le premier est \ ([^)] *? \), Qui correspondra à (, n'importe quel nombre de caractères qui ne le sont pas) (le moins possible, d'où le?), Et ensuite a). La deuxième partie est <[a-zA-Z/][^>] *?>, Qui correspondra à une ouverture <, une lettre (pour essayer d'éviter de faire correspondre des <), et tout le reste jusqu'à la prochaine> de la même manière que la partie(). Le | entre eux signifie "ou", donc si une partie correspond, l'expression correspond. – cHao

+1

Les? Peuvent effectivement être retirés, maintenant que j'y pense. Il ne correspondra jamais au premier délimiteur, car nous spécifions que le délimiteur ne peut jamais faire partie de la chaîne interne. – cHao

1
+0

Je suis désolé mais je suis nouveau à ce sujet. Pourriez-vous s'il vous plaît me dire ce que l'avertissement était? Je n'ai peut-être pas compris. –

+2

Dans un son moins horreur-blockbuster: il vous avertit que les expressions rationnelles ** ne devraient pas ** être utilisées pour analyser (X) HTML. – nc3b

+0

@rookie Fondamentalement, le point est que les expressions régulières ne sont pas bonnes pour l'analyse de HTML. Sauf si vous avez un cas très spécifique. Vous devriez utiliser un outil de parseur HTML à la place. – jjnguy