2010-07-21 84 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的回答不同,它的優點是不需要字符串中有空格。

相關問題