当前位置: 首页 > 知识库问答 >
问题:

PatternSyntaxException:在Java中使用regex时的非法重复

孔礼骞
2023-03-14
Pattern.matches("{\"user_id\" : [0-9]*}", inputLine)
{"user_id" : 34}

然而,我得到了一个例外:

java.util.regex.PatternSyntaxException: Illegal repetition
{"user_id" : 24}
    at java.util.regex.Pattern.error(Unknown Source)
    at java.util.regex.Pattern.closure(Unknown Source)
    at java.util.regex.Pattern.sequence(Unknown Source)
    at java.util.regex.Pattern.expr(Unknown Source)
    at java.util.regex.Pattern.compile(Unknown Source)
    at java.util.regex.Pattern.<init>(Unknown Source)
    at java.util.regex.Pattern.compile(Unknown Source)
    at java.util.regex.Pattern.matches(Unknown Source)
    at org.whispercomm.manes.server.http.IntegrationTest.createUser(IntegrationTest.java:173)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

我做错了什么?

共有1个答案

段干麒
2023-03-14

{}在Java的regex方言(以及大多数其他方言)中是特殊的:它们是重复量词{n,m}的开始和结束标记,其中nm是整数。因此会出现错误消息:“非法重复”。

您应该转义它们:“\\{\”user_id\“:[0-9]*\\}”

既然您似乎正在尝试解析JSON,我建议您看看Jackson。

 类似资料:
  • 问题内容: 我对正则表达式了解不多,但是我需要匹配一个简单的模式。以下内容应返回true, 当inputLine为 但是,我收到此异常: 我究竟做错了什么? 问题答案: 该和是在Java中的正则表达式方言(和大多数其他方言为此事)特殊:他们是对的重复数量的开闭令牌哪里以及是整数。因此,错误消息:“非法重复”。 您应该摆脱它们:。 而且由于您似乎正在尝试解析JSON,所以建议您看看Jackson。

  • 问题内容: 我试图写将接受的方法,检查是否有某些记号的情况下(例如,,等),并更换每个令牌与新的字符串,它是从获取。 例如,如果我将此方法传递给以下字符串: “现在的$ {fizz}母牛如何。$ {buzz}的形状奇怪的$ {foo}。” 并且如果该方法参考了以下内容: 那么结果字符串将是: “现在是棕色的母牛。纵火犯的脚怪异。” 这是我的方法: 运行此命令时,出现以下异常: 我为什么得到这个?

  • 我想知道,非静态方法的用途是什么。我的理解是,静态方法可以直接调用,也可以由类的对象调用,而非静态方法只能由类的一个对象调用。 上述方法可以直接调用,也可以由类的对象调用。那么,我什么时候应该使用非静态方法呢?

  • 问题内容: 我在两个不同的项目中使用Apache POI 第一个项目是一个独立的Java应用程序。这里一切都很好。 第二个项目是一个Android项目。我可以很好地访问xlsx的工作簿,但是在计算公式时,它会因异常而崩溃 这是有问题的代码行: Android为什么不接受呢?就像我说的那样:它在独立的Java应用程序上工作正常。 问题答案: Android使用的ICU regex库与Java reg

  • 我试图找出如何将regex合并到python if语句中。我有一个pandas数据框架,在其中我迭代行,并希望在每一行具有特定的文本组合时执行一个操作。正则表达式应匹配任何以大写字母开头,后跟6个数字(即R142389)的7个字符串 我这样做对吗?任何帮助都将不胜感激!

  • 我读了一些关于如何优化正则表达式的文章,但是没有一个答案(更少的组,使用{X,Y}而不是*)似乎阻止了我的正则表达式获得堆栈溢出错误。 我正在尝试通过文件进行动态搜索。假设我正在一个相当大(2-4MB)的文件中搜索“我打赌你找不到我”。我的正则表达式生成器将生成正则表达式: 这个正则表达式的想法是,无论单词之间有什么字符或空格,它都能找到准确的短语。然而,当我尝试使用: 我遇到堆栈溢出错误。我知道