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");

Working demo

如前所述,您可以使用以下语句:

string = string.replaceAll("[@:$]+[^ ]*", "ZZZZ");

[^...] 匹配除 ^.

之后的所有字符

可能的应用:

  1. 一次处理人写文件(需要控制结果,可能会有包含@:$

  2. 的String
  3. 可能会修改一些调试输出以便它可以在 DBMS 中执行

限制为 [a-zA-Z0-9_.]* 而不是 [^ ]* 可能更安全。