2011-06-30 3 views
2

J'ai suivi regex (<.*?>.*?</.*?>|[\w[-]]+)\p{Punct}* qui fonctionne parfaitement pour la plupart des chaînes avec des balises mais si une balise n'est pas précédée d'espace, elle casse l'étiquette tout en trouvant une correspondance.regex fractionnement des étiquettes dans la chaîne

S'il vous plaît aidez-moi à modifier cette regex de sorte qu'il ne casse pas les étiquettes. Tout ce que je cherche est de diviser sur les espaces, mais pas si l'espace est dans une étiquette.

Par exemple:

 
BIRD-<abc attr="co_1">ab</span> @apos;<abc attr="co_12">cd</span>FEE DEF 

devrait se séparer en:

 
BIRD-&ltabc attr="co_1">ab</span> 
@apos;<abc attr="co_12">cd</span>FEE 
DEF 

J'utilise actuellement matcher pour correspondre à ce modèle et obtenir les jetons

Matcher matcher = REGEX.matcher(newString); 

while (matcher.find()) 
{ 
    token = matcher.group(); 
} 
+7

Veuillez d'abord voir ceci: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags#1732454 – c00kiemon5ter

Répondre

0

Essayez ceci:

.*?<.*?>.*?</.*?>[^\s]*

Il produira le résultat attendu.

0

Je me méfierais d'effectuer ce type d'analyse en utilisant regex. Le motif que vous suggérez, ainsi que diverses adaptations de celui-ci peuvent commencer à se comporter bizarrement si les attributs contiennent les caractères> et/ou <. L'exemple suivant lève votre motif, par exemple.

<element attr="></>">value</element> 

Chaque fois que vous avez besoin d'analyser ou de traiter un fichier XML, je vous conseille d'envisager l'utilisation d'un analyseur XML approprié. S'il vous plaît voir this answer pour une explication plus longue.

Questions connexes