Java replaceAll() 只替换一个实例
Java replaceAll() only replaces one instance
我想使用 string.replaceAll() 替换所有 以“@”、“$”或“:” 和 以“”结尾(space)。到目前为止我有这个:
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 = @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");
[^...]
匹配除 ^
.
之后的所有字符
可能的应用:
一次处理人写文件(需要控制结果,可能会有包含@:$
的String
可能会修改一些调试输出以便它可以在 DBMS 中执行
限制为 [a-zA-Z0-9_.]*
而不是 [^ ]*
可能更安全。
我想使用 string.replaceAll() 替换所有 以“@”、“$”或“:” 和 以“”结尾(space)。到目前为止我有这个:
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 = @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");
[^...]
匹配除 ^
.
可能的应用:
一次处理人写文件(需要控制结果,可能会有包含
@:$
的String
可能会修改一些调试输出以便它可以在 DBMS 中执行
限制为 [a-zA-Z0-9_.]*
而不是 [^ ]*
可能更安全。