java String.replaceAll正则表达式问题

use*_*146 0 java regex string replaceall

我有一个包含以下文本的字符串

String my_string = "hello world. it's cold out brrrrrr! br br";
Run Code Online (Sandbox Code Playgroud)

我想替换每个隔离 BR<br />

问题是我想避免将字符串转换为

"hello world. it's cold out <br />rrrrr! <br /> <br />";
Run Code Online (Sandbox Code Playgroud)

我想做的是将字符串(使用replaceAll)转换为

"hello world. it's cold out brrrrrr! <br /> <br />";
Run Code Online (Sandbox Code Playgroud)

我确信这很简单,但我的正则表达式是不正确的.

my_string.replaceAll("\\sbr\\s|\\sbr$", "<br />");
Run Code Online (Sandbox Code Playgroud)

我的正则表达式应该找到'空白''b''r''空白'或''空格''b''r''行尾'

但它错过了我的字符串中的最后一个"br"

"hello world. it's cold out brrrrrr!<br />br"
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么??TKS!

ken*_*ytm 8

使用

my_string.replaceAll("\\bbr\\b", "<br />");
Run Code Online (Sandbox Code Playgroud)

你的正则表达式不起作用,因为在

?br?br
^
Run Code Online (Sandbox Code Playgroud)

该模式\sbr\s将消耗整体?br?,留下

<br />br
      ^
Run Code Online (Sandbox Code Playgroud)

现在没有前面的空间br可以匹配\sbr$,所以它会被遗漏.

另一方面,这\b意味着一个词边界,是一个零宽度的断言,即它不会消耗任何字符.因此,将保留空间并且所有隔离br的将被匹配.