Java 匹配表达式并替换
我有一个这样的字符串-${username}我想匹配${username}并用值Tom替换它。我正在尝试下面的代码和许多其他,但没有成功Java 匹配表达式并替换,java,regex,replace,Java,Regex,Replace,我有一个这样的字符串-${username}我想匹配${username}并用值Tom替换它。我正在尝试下面的代码和许多其他,但没有成功 String str = "This-is-${username}"; System.out.println(str.replaceAll("[/^${*}$/]", "Tom")); 编辑:在${}之间可以有任何值当前它的用户名在${}之间,您必须使用: str.replaceAll("\\$\\{username\\}", "Tom") 注意转义的{和
String str = "This-is-${username}";
System.out.println(str.replaceAll("[/^${*}$/]", "Tom"));
编辑:在${}之间可以有任何值当前它的用户名在${}之间,您必须使用:
str.replaceAll("\\$\\{username\\}", "Tom")
注意转义的{和}字符
如果要替换\\${someString}形式的任何字符串,应使用:
str.replaceAll("\\$\\{[^}]+\\}", "Tom")
解释:
\\$-匹配$符号
\\{匹配一个大括号
[^}]+-一次或多次匹配除大括号外的任何内容
\\}-匹配右括号
注:
由于{、}和$是特殊的正则表达式字符,因此必须在正则表达式中使用\对它们进行转义,以便将它们作为字符串进行匹配。
我们在中使用\\,因为在java中\\生成字符串\
您必须使用:
str.replaceAll("\\$\\{username\\}", "Tom")
注意转义的{和}字符
如果要替换\\${someString}形式的任何字符串,应使用:
str.replaceAll("\\$\\{[^}]+\\}", "Tom")
解释:
\\$-匹配$符号
\\{匹配一个大括号
[^}]+-一次或多次匹配除大括号外的任何内容
\\}-匹配右括号
注:
由于{、}和$是特殊的正则表达式字符,因此必须在正则表达式中使用\对它们进行转义,以便将它们作为字符串进行匹配。
我们在中使用\\,因为在java中\\生成字符串\
使用\\$\{[^}]*\}
输出
This-is-Tom
This-is-Tom-again
使用\\$\{[^}]*\}
输出
This-is-Tom
This-is-Tom-again
好吧,虽然这个想法在某种程度上是正确的,但你编写正则表达式的方式却不是 [/^${*}$/]是一个字符类,将与/^${*}$/中的任何一个匹配,这意味着它等价于[/^${*}] 更好的可能是这个正则表达式:
str.replaceAll("\\$\\{[^}]*}", "Tom")
您需要逃逸$,否则它将意味着“行尾”
[^}]是一个否定类,将匹配除右大括号以外的所有字符。好吧,虽然这个想法有点正确,但您编写正则表达式的方式却不正确 [/^${*}$/]是一个字符类,将与/^${*}$/中的任何一个匹配,这意味着它等价于[/^${*}] 更好的可能是这个正则表达式:
str.replaceAll("\\$\\{[^}]*}", "Tom")
您需要逃逸$,否则它将意味着“行尾”
[^}]是一个否定类,将匹配除右大括号外的所有字符。这样做
String str = "This-is-${username}";
System.out.println(str.replaceAll("\\$\\{username\\}", "Tom"));
你喜欢这样吗
String str = "This-is-${username}";
System.out.println(str.replaceAll("\\$\\{username\\}", "Tom"));
通过将您试图匹配的模式放置在字符类[]中,它将匹配此处的每个字符。即使从角色类中删除模式,它也将无法匹配 您根本不需要分隔符,您可以删除字符串“^”的开头和字符串$anchors的结尾,因为您的模式不在数据中的任何位置。量词并没有做你认为在这种情况下是什么 您可以使用以下命令,必须在此处转义\\文本$,和{ 看 说明:
\$ '$'
\{ '{'
[^}]* any character except: '}' (0 or more times)
} '}'
通过将您试图匹配的模式放置在字符类[]中,它将匹配此处的每个字符。即使从字符类中删除该模式,它也将无法匹配 您根本不需要分隔符,您可以删除字符串“^”的开头和字符串$anchors的结尾,因为您的模式不在数据中的任何一个位置。而且*量词的作用与您认为的不同 您可以使用以下命令,必须在此处转义\\文本$,和{ 看 说明:
\$ '$'
\{ '{'
[^}]* any character except: '}' (0 or more times)
} '}'
是否要替换${SOMETHING}类型的子字符串或仅替换${username}类型的子字符串?是否要替换${SOMETHING}类型的子字符串或仅替换${username}类型的子字符串?