2010-07-21 8 views
0

Supposons que nous ayons une phrase (plusieurs mots sans point après le dernier).Comment faire correspondre le dernier mot d'une phrase?

Je dois envelopper le dernier mot avec quelques balises html (par exemple, <strong>lastword</strong>). Comment puis-je y parvenir avec les expressions régulières java?

J'ai déjà essayé ceci:

"John Doe Jr".replaceAll ("(.+$)", "<strong>$1</strong>"); 

mais il se traduit par

John<strong> Doe Jr</strong> 

P.S. C'est correct si nous avons un espace après <strong>, le problème principal est que le motif correspond à la plus grande sous-séquence alors que j'ai besoin de la plus petite.

+0

Vous ne craignez pas que le sens d'un point est ambigu? En plus de marquer la fin de la phrase, il est utilisé dans les abréviations, les nombres, les points de suspension, les dates, les noms de domaine, etc. – mdma

Répondre

2
"John Doe Jr".replaceAll("(\\S+)$", "<strong>$1</strong>") 

\S est un caractère non-blanc

+0

'\\ S n'est pas un opérateur spatial' est une mauvaise formulation. La définition officielle est: 'Un caractère non-espace: [^ \ s]' (voir ici: http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html) –

2

Le dernier mot serait les caractères non-espace précédant la fin ou la chaîne. Vous pouvez définir un ensemble de caractères avec [] et inverser cela avec un ^, comme dans [^ a-z] pour faire correspondre tout sauf a-z.

"John Doe Jr".replaceAll("([^ ]+)$", "<strong>$1</strong>"); 

Cela a aussi l'avantage qu'il ne nécessite pas qu'il y ait des espaces dans la chaîne, contrairement à la réponse de Marcelo Cantos.

Questions connexes