我想使用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"
如何编辑正则表达式以产生所需的输出?
答案 0 :(得分:2)
答案 1 :(得分:1)
如前所述,您可以使用以下语句:
string = string.replaceAll("[@:$]+[^ ]*", "ZZZZ");
[^...]
匹配除^
之后的所有字符。
可能的申请:
一次处理人工编写的文件(需要控制结果,可能会有包含@:$
的字符串
可能修改一些调试输出,以便可以在DBMS中执行
限制使用[a-zA-Z0-9_.]*
代替[^ ]*
这样的内容可能会更安全。