Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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 删除两个字符之间的字符串_Java_Regex_String - Fatal编程技术网

Java 删除两个字符之间的字符串

Java 删除两个字符之间的字符串,java,regex,string,Java,Regex,String,我有这根绳子 我需要删除[^和]之间的字符串 得到 test this a lorem epsum lorem epsum lorem epsum 我用JAVA试过这个正则表达式 str = str.replaceAll("[^.*?]", ""); 但它不起作用 你有什么想法吗 最好的祝愿发生这种情况是因为您没有转义这些字符:[]^,因此它们在正则表达式中被视为特殊字符。基本上,现在它正在替换任何不是、*或?的字符,只剩下两个句点。只需在它们之前添加\\,就可以摆脱它们,这样它就可以像您

我有这根绳子

我需要删除[^和]之间的字符串

得到

test this a 
lorem epsum
lorem epsum
lorem epsum
我用JAVA试过这个正则表达式

str = str.replaceAll("[^.*?]", "");
但它不起作用

你有什么想法吗


最好的祝愿

发生这种情况是因为您没有转义这些字符:
[]^
,因此它们在正则表达式中被视为特殊字符。基本上,现在它正在替换任何不是
*
的字符,只剩下两个句点。只需在它们之前添加
\\
,就可以摆脱它们,这样它就可以像您所希望的那样工作

str = str.replaceAll("\\[\\^.*?\\]", "");

你的正则表达式不正确

使用类似

String str = "test this a [^architecture.jpg]" + "lorem epsum" + "lorem epsum" + "[^rct.png]" + "lorem epsum";
String foo = "(?s)\\[\\^.+?\\]";
System.out.println(str.replaceAll(foo, ""));
输出为:

测试这一点


只需添加\\,字符串将如下所示

str = str.replaceAll("\\[\\^.*?\\]", "");

^
[
]
是需要首先转义的特殊字符,这就是它不起作用的原因,可以通过在每个特殊字符前面加
\
来完成

如果要删除
[^
]
之间的所有内容,可以使用
\[\\\^[^]*\\]
作为定义字符序列的正则表达式:

  • [^
    开始
  • 包含
    0
    或除
    ]
    以外的任何字符序列
  • 然后
    ]
  • 相应的代码:

    str = str.replaceAll("\\[\\^[^]]*\\]", "");
    

    [
    ]
    ^
    是,你需要摆脱它们。谢谢你们,你们真了不起谢谢你们,你们真了不起
    str = str.replaceAll("\\[\\^[^]]*\\]", "");