Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java replaceAll()只替换一个实例_Java_Regex_Replaceall - Fatal编程技术网

Java 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.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 = ZZZZ AND familyName = ZZZZ"

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

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

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


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

string = string.replaceAll("[@:$]+[^ ]*", "ZZZZ");
[^…]
匹配所有字符,后面跟
^
的字符除外

可能的应用:

  • 一次性处理人工编写的文件(需要控制结果,可能存在包含
    @:$

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


  • 更安全的做法可能是限制使用类似于
    [a-zA-Z0-9.]*
    的内容,而不是
    [^]*

    以及
    […]$familyName“
    不会以空格结尾。啊,看来familyName没有以空格结尾毕竟是个错误,很好的发现,先生。你知道如何调整正则表达式以在没有空格的情况下仍然替换familyName吗?你可以做类似于
    .replaceAll([@:$]+[^]*,“ZZZZ”)的事情。”
    为什么要用正则表达式来管理SQL?此外,SQL
    char
    类型需要用
    包围.Btw.如果您需要它来处理文件,您也可以使用高级文本编辑器(如editPlus),输入正则表达式并快速单击替换项以进行监督。工作!非常感谢,先生。我也感谢您提供的额外信息。
    
    string = string.replaceAll("[@:$]+[^ ]*", "ZZZZ");