2010-07-21 59 views
0

假设我们有一个句子(最后一个没有点的几个词)。如何匹配句子中的最后一个单词?

我需要用一些html标记来包装最后一个单词(例如,<strong>lastword</strong>)。

如何用java正则表达式实现此目的?

我已经尝试过这样的:

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

,但它会导致

John<strong> Doe Jr</strong> 

附:没关系,如果在<strong>之后有一个空格,主要问题是模式匹配最大的子序列,而我需要最小的子序列。

+0

你是不是担心,一个点的含义是模糊的?除了标记句子的结尾,它还用于缩写,数字,省略号,日期,域名等。 – mdma 2010-07-21 12:28:06

回答

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

\S是一个非空白字符

+0

'\\ S不是空间操作符'是错误的措辞。官方定义是:'非空白字符:[^ \ s]'(请参阅http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html) – 2010-07-21 13:52:19

2

最后一个单词是末尾或字符串前面的非空格字符。您可以使用[]定义一组字符,并用^来否定该字符,如[^ a-z]中的匹配除a-z之外的所有字符。

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

与Marcelo Cantos的回答不同,它的优点是不需要字符串中有空格。

相关问题