Java replaceAll()只替换一个实例
我想使用string.replaceAll()替换所有以“@”、“$”或“:”开头的字符序列,以及以“”(空格)结尾的。到目前为止,我有:Java replaceAll()只替换一个实例,java,regex,replaceall,Java,Regex,Replaceall,我想使用string.replaceAll()替换所有以“@”、“$”或“:”开头的字符序列,以及以“”(空格)结尾的。到目前为止,我有: string = string.replaceAll("[@:$]+.*?(?= )", "ZZZZ"); 但是,使用的正则表达式仅替换满足上述条件的第一个实例。因此,考虑到字符串: "SELECT title FROM Name WHERE nickname = :nickname AND givenName = @givenName AND famil
string = string.replaceAll("[@:$]+.*?(?= )", "ZZZZ");
但是,使用的正则表达式仅替换满足上述条件的第一个实例。因此,考虑到字符串:
"SELECT title FROM Name WHERE nickname = :nickname AND givenName = @givenName AND familyName = $familyName"
电流(不正确)输出:
期望输出:
"SELECT title FROM Name WHERE nickname = ZZZZ AND givenName = ZZZZ AND familyName = ZZZZ"
如何编辑正则表达式以生成所需的输出?如果要删除以这些字符开头的单词,可以使用以下代码:
string = string.replaceAll("[@:$]+\\w+", "ZZZZ");
如前所述,您可以使用以下语句:
string = string.replaceAll("[@:$]+[^ ]*", "ZZZZ");
[^…]
匹配所有字符,后面跟^
的字符除外
可能的应用:
@:$
更安全的做法可能是限制使用类似于
[a-zA-Z0-9.]*
的内容,而不是[^]*
以及[…]$familyName“
不会以空格结尾。啊,看来familyName没有以空格结尾毕竟是个错误,很好的发现,先生。你知道如何调整正则表达式以在没有空格的情况下仍然替换familyName吗?你可以做类似于.replaceAll([@:$]+[^]*,“ZZZZ”)的事情。”
为什么要用正则表达式来管理SQL?此外,SQLchar
类型需要用包围.Btw.如果您需要它来处理文件,您也可以使用高级文本编辑器(如editPlus),输入正则表达式并快速单击替换项以进行监督。工作!非常感谢,先生。我也感谢您提供的额外信息。
string = string.replaceAll("[@:$]+[^ ]*", "ZZZZ");