java - 如何替换所有以特定字符开头和结尾的子串?

Dau*_*aud 2 java regex

我有一个字符串

"棕色的狐狸@跳过@围栏@"

,我希望'@'用' kicked' 替换两个之间的所有子串,即最终输出应该是:

"棕色的狐狸被踢了踢"

我写了以下但无法弄清楚错误:

string.replaceAll("^@.*@$", "kicked");
Run Code Online (Sandbox Code Playgroud)

das*_*ght 9

你不应该使用锚元素^$.它们表示整个输入的开始和结束,而不是单词的开头和结尾.你还应该.[^@](用"除了"之外的任何东西@)代替点来使你的表达更有效率.

string.replaceAll("@[^@]*@", "kicked");
Run Code Online (Sandbox Code Playgroud)

如果你想避免替换单词中的标记元素,例如,如果你想保留he@ll@o原样,而不是制作它hekikkedo,你可以在\b表达式的两端放入单词边界的标记:

string.replaceAll("\\b@[^@]*@\\b", "kicked");
Run Code Online (Sandbox Code Playgroud)