Java 如何匹配句子中的最后一个单词?

Java 如何匹配句子中的最后一个单词?,java,regex,Java,Regex,假设我们有一个句子(最后一个句子后面有几个没有点的单词) 我需要用一些html标记来包装最后一个单词(例如,lastword) 如何使用java正则表达式实现这一点 我已经试过了: "John Doe Jr".replaceAll ("( .+$)", "<strong>$1</strong>"); “John Doe Jr.”replaceAll((.+$),“$1”; 但结果是 John<strong> Doe Jr</strong> J

假设我们有一个句子(最后一个句子后面有几个没有点的单词)

我需要用一些html标记来包装最后一个单词(例如,
lastword

如何使用java正则表达式实现这一点

我已经试过了:

"John Doe Jr".replaceAll ("( .+$)", "<strong>$1</strong>");
“John Doe Jr.”replaceAll((.+$),“$1”;
但结果是

John<strong> Doe Jr</strong>
JohnDoe Jr

p、 如果我们在
之后有一个空格就可以了,主要的问题是模式匹配最大的子序列,而我需要最小的子序列。

最后一个字是结尾或字符串前面的非空格字符。您可以使用[]定义一组字符,并使用^对其求反,就像在[^a-z]中一样,以匹配除a-z以外的所有字符

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

与Marcelo Cantos的回答不同,这还有一个优点,即它不要求字符串中有任何空格。

最后一个单词将是结尾或字符串前面的非空格字符。您可以使用[]定义一组字符,并使用^对其求反,就像在[^a-z]中一样,以匹配除a-z以外的所有字符

"John Doe Jr".replaceAll("([^ ]+)$", "<strong>$1</strong>");
"John Doe Jr".replaceAll("(\\S+)$", "<strong>$1</strong>")
“John Doe Jr.”replaceAll(([^]+)$”,“$1”;
与Marcelo Cantos的回答不同,这也有一个优点,即它不要求字符串中有任何空格。

“John Doe Jr”.replaceAll(“(\\S+$”,“$1”)
"John Doe Jr".replaceAll("(\\S+)$", "<strong>$1</strong>")
是非空白字符

小约翰·多伊.replaceAll(“(\\S+$”,“$1”)

是非空白字符

您是否不担心点的含义不明确?除了标记句子的结尾,它还用于缩写、数字、省略号、日期、域名等。你不担心点的含义不明确吗?除了标记句尾,它还用于缩写、数字、省略号、日期、域名等。
\\s不是空格运算符
是糟糕的措辞。官方定义是:
非空白字符:[^\s]
(请参见此处:)
\\s不是空格运算符
是错误的措辞。官方定义是:
非空白字符:[^\s]
(参见此处:)