【问题标题】:PatternSyntaxException: Dangling meta character even though no metacharacters are dangling [duplicate]PatternSyntaxException:即使没有元字符悬空,元字符也悬空[重复]
【发布时间】:2020-06-20 00:15:31
【问题描述】:

我正在尝试检查字符串是否与格式为 x+yix-yi 的复数模式匹配。 我为此目的的正则表达式是^\d+(\.\d+)?[-\+]\d+(\.\d+)?i,它在正则表达式(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

它抱怨的“+”是这个:[-\\+],但自从我逃脱它以来,它似乎并没有悬空。我是初学者,所以我会很感激我能得到的任何帮助。谢谢!

【问题讨论】:

  • @WJS 解决了这个问题:) 不过这不是问题
  • 它对我有用。请查看代码here
  • @Mandy8055 我试图理解这部分:[-+\\\\] 这不只是说“允许尽可能多的'-'”然后它转义两个分号吗?我很困惑。
  • @Mandy8055 我很抱歉可能很烦人,但我了解正则表达式的方式,我认为方括号的意思是“匹配集合中的任何字符”并且为了允许“+”字符,我必须逃避它,因为它是一个元字符。正则表达式在 Java 中的工作方式是否不同,或者我只是有点愚蠢?编辑:没有看到你的编辑:D

标签: java regex


【解决方案1】:

要表示复数 x + yi,x-yi,你可以这样做

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

【讨论】:

  • 感谢您的帮助!不幸的是,您的解决方案不允许我输入双精度数或多位数字,例如“283.482+28.382i”。
  • 它也匹配"3,5i"
  • @Flo Klar,你说得对,我没有考虑浮点数,表达式是^[0-9]+([.][0-9]+)?[+,-][0-9]+([.][0-9]+)?[i]$
【解决方案2】:

这个问题根本与那个表达无关。我用了 String.split("+"); 在我的代码中的其他地方并忽略了转义那个“+”。

为了后代:使用 String.split(); 时转义元字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-30
    • 2021-05-28
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 2012-07-21
    • 2010-10-29
    • 1970-01-01
    相关资源
    最近更新 更多