Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.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 intellij中的正则表达式编译_Java_Intellij Idea - Fatal编程技术网

Java intellij中的正则表达式编译

Java intellij中的正则表达式编译,java,intellij-idea,Java,Intellij Idea,我正在努力做到: uri=uri.replaceFirst("{}",param.toString()); 我应该使用正则表达式代替{},但这不应该是编译问题,因为方法签名采用字符串,{}是完全有效的字符串。下面是replaceFirst(): 帮助我理解这是一个编译错误 IntellijIDEA 2018.1第一个参数应为有效的正则表达式。由于存在元字符,因此必须转义: uri=uri.replaceFirst("\\{\\}",param.toString()); 这使得它能够报告此类错

我正在努力做到:

uri=uri.replaceFirst("{}",param.toString());
我应该使用正则表达式代替
{}
,但这不应该是编译问题,因为方法签名采用字符串,
{}
是完全有效的字符串。下面是
replaceFirst()

帮助我理解这是一个编译错误


IntellijIDEA 2018.1

第一个参数应为有效的正则表达式。由于存在元字符,因此必须转义:

uri=uri.replaceFirst("\\{\\}",param.toString());
这使得它能够报告此类错误。这是一个IDE特性。使用
javac
编译此代码不会导致失败

您可以禁用检查(alt+enter,链接到上面的页面上的详细信息):


{}
是一个特殊的正则表达式字符,表示范围运算符,因此在使用它之前必须对其进行转义

// normal use
    "".replaceFirst("a{1,2}","");
如图所示,
{}
被识别为与
a

因此,在使用正则表达式时,您必须使用范围运算符
{}
提供一些字符/单词以及最小值和最大值(否则可能导致正则表达式引擎崩溃或意外行为,因此编译器在这里是主动的)

解决方案:使用
\\

uri = uri.replaceFirst("\\{\\}",param.toString());

这不是您收到的编译错误。这是IntelliJ的检查,尽管它的下划线是红色的

您可以通过进入设置来禁用检查


我明白了,我需要使用有效的正则表达式字符串,但这不应该是兼容问题。您的Java代码可以编译,但正则表达式的编译失败了。Java引发的异常是
Java.util.regex.PatternSyntaxException抛出:非法重复
,这不是编译问题。术语可能很微妙,但有时我们只是说“regex编译”。你明白了。我理解这听起来很奇怪,但这是一个顺从的错误。试一试intellij@SachinVerma编辑了IntelliJ检验功能的相关信息,该功能可进行此类验证
uri = uri.replaceFirst("\\{\\}",param.toString());