java String.replaceAll regex question

让人想犯罪 __ 提交于 2019-12-20 07:38:42

问题


I have a string that contains the following text

String my_string = "hello world. it's cold out brrrrrr! br br";

I'd like to replace each isolated br with <br />

The issue is that I'd like to avoid converting the string to

"hello world. it's cold out <br />rrrrr! <br /> <br />";

What I'd like to do is convert the string (using replaceAll) to

"hello world. it's cold out brrrrrr! <br /> <br />";

I'm sure this is very simple, but my regex isn't correct.

my_string.replaceAll("\\sbr\\s|\\sbr$", "<br />");

my regex is supposed to find 'whitespace' 'b' 'r' 'whitespace' OR 'whitespace' 'b' 'r' 'end of line'

but it misses the final "br" in my string

"hello world. it's cold out brrrrrr!<br />br"

what am I doing wrong?? TKS!


回答1:


Use

my_string.replaceAll("\\bbr\\b", "<br />");

Your regex doesn't work because in

␣br␣br
^

The pattern \sbr\s will consume the whole ␣br␣, leaving with

<br />br
      ^

now there is no preceding space for this br to match \sbr$, so it will be missed.

On the other hand, the \b, meaning a word-boundary, is a zero-width assertion, i.e. it won't consume any characters. Therefore the spaces will be kept and all isolated br's will be matched.




回答2:


"hello world. it's cold out brrrrrr!<br />br" Your final 'br' isn't preceded by whitespace. What's supposed to happen?



来源:https://stackoverflow.com/questions/3935741/java-string-replaceall-regex-question

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!