Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.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 PatternSyntaxException:悬挂元字符,即使没有悬挂的元字符_Java_Regex - Fatal编程技术网

Java PatternSyntaxException:悬挂元字符,即使没有悬挂的元字符

Java PatternSyntaxException:悬挂元字符,即使没有悬挂的元字符,java,regex,Java,Regex,我试图检查字符串是否与复数模式匹配,格式为x+yi或x-yi。 为此,我的正则表达式是^\d+(\.\d+)[-\+]\d+(\.\d+)?i,它在regexr(regexr.com/572bb)上运行良好 下面是我用java编写的最简单的示例: public class ExampleClass { public static void main(){ String comp = "3+5i"; System.out.println(comp.match

我试图检查字符串是否与复数模式匹配,格式为
x+yi
x-yi
。 为此,我的正则表达式是
^\d+(\.\d+)[-\+]\d+(\.\d+)?i
,它在regexr(regexr.com/572bb)上运行良好

下面是我用java编写的最简单的示例:

public class ExampleClass {
    public static void main(){
        String comp = "3+5i";
        System.out.println(comp.matches("^\\d+(\\.\\d+)?[-\\+]\\d+(\\.\\d+)?i"));
    }
它抛出上述异常。全文如下:

Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0

它抱怨的“+”是这样一个:
[-\\+]
,但自从我逃过它之后,它似乎就不再摇晃了。我是一个初学者,所以我将感谢任何帮助,我可以得到。谢谢大家!

表示复合物x+yi,x-yi,你可以这样做

String comp = "3+5i";
System.out.println(comp.matches("^[0-9]+([.][0-9]+)?[+,-][0-9]+([.][0-9]+)?[i]$"));

这个问题与这个表达毫无关系。我曾经
String.split(“+”)在我的代码中的其他地方,忽略了转义“+”


对于后代:使用
String.split()时转义元字符

谢谢您的帮助!不幸的是,您的解决方案不允许我输入双位数或多位数,如“283.482+28.382i”。它还匹配
“3,5i”
@Flo Klar,您是对的,我没有考虑浮点数,表达式应该是
^[0-9]+([.][0-9]+)?[+,-][0-9]+([.][0-9]+]$
@WJS修复了:)这不是问题,尽管它对我有用。请看代码。@Mandy8055我正在试着理解这部分:
[-+\\\\]
这不是说“允许任意多的“-”,然后它会转义两个分号吗?我很困惑。@Mandy8055我很抱歉可能很烦人,但我学习regex的方式是,我认为方括号表示“匹配集合中的任何字符”,为了允许“+”字符,我必须将其转义,因为它是元字符。正则表达式在Java中的工作方式是不同的,还是我有点傻?编辑:未看到您的编辑:请向我们发送。