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());