Java replaceAll()仅替换一个实例

时间:2015-06-14 02:23:32

标签: java regex replaceall

我想使用string.replaceAll()替换所有字符序列以' @',' $'或'开头: ' 以'结尾'(空格)即可。到目前为止,我有这个:

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"

如何编辑正则表达式以产生所需的输出?

2 个答案:

答案 0 :(得分:2)

如果要删除以这些字符开头的单词,则可以使用以下代码:

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

<强> Working demo

enter image description here

答案 1 :(得分:1)

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

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

[^...]匹配除^之后的所有字符。

可能的申请:

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

  2. 可能修改一些调试输出,以便可以在DBMS中执行

  3. 限制使用[a-zA-Z0-9_.]*代替[^ ]*这样的内容可能会更安全。