我有一个类似This-is-${username}
的字符串我要匹配${username}
并将其替换为值 Tom 。我正在尝试遵循代码和许多其他但没有成功。
String str = "This-is-${username}";
System.out.println(str.replaceAll("[/^${*}$/]", "Tom"));
修改:${}
当前用户名${}
答案 0 :(得分:3)
使用\\$\\{[^}]*\\}
String pattern = "\\$\\{[^}]*\\}";
String str1 = "This-is-${username}";
System.out.println(str1.replaceAll(pattern, "Tom"));
String str2 = "This-is-${something}-again";
System.out.println(str2.replaceAll(pattern, "Tom"));
输出
This-is-Tom
This-is-Tom-again
答案 1 :(得分:3)
嗯,虽然这个想法有点朝着正确的方向,但你写正则表达式的方式并非如此。
[/^${*}$/]
是一个字符类,会匹配/^${*}$/
中的任何一个,这意味着它等同于[/^${*}]
。
最好的可能就是这个正则表达式:
str.replaceAll("\\$\\{[^}]*}", "Tom")
你需要逃避$
,否则就意味着“行尾”。
[^}]
是一个否定的类,将匹配除结束括号外的所有字符。
答案 2 :(得分:3)
通过放置您尝试在字符类[]
内匹配的模式,它匹配每个字符。即使从字符类中删除模式,也无法匹配。
您根本不需要分隔符/
,您可以删除字符串^
的开头和字符串$
锚点的结尾,因为您的模式不在数据的任何位置。并且*
量词在这种情况下没有做你认为的那样。
您可以使用以下内容,您必须在此处\\
文字$
和{
。{/ p>
String str = "This-is-${username}";
System.out.println(str.replaceAll("\\$\\{[^}]*}", "Tom"));
// => "This-is-Tom"
请参阅Working demo
说明:
\$ '$'
\{ '{'
[^}]* any character except: '}' (0 or more times)
} '}'
答案 3 :(得分:2)
你必须使用:
str.replaceAll("\\$\\{username\\}", "Tom")
请注意转义的{
和}
字符。
如果您希望替换任何形式为\\${someString}
的字符串,您应该使用:
str.replaceAll("\\$\\{[^}]+\\}", "Tom")
解释:
\\$
- 匹配$
标志\\{
- 匹配一个大括号[^}]+
- 匹配任何东西,但是大括号,一次或多次\\}
- 匹配一个大括号注意:
{
,}
和$
是特殊的正则表达式字符,因此您必须使用正则表达式中的\
来转义它们,以便将它们作为字符串进行匹配。\\
中使用"
因为在java "\\"
中生成字符串\
答案 4 :(得分:0)
喜欢这个
String str = "This-is-${username}";
System.out.println(str.replaceAll("\\$\\{username\\}", "Tom"));