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

简单Java regex匹配器不工作

隗高旻
2023-03-14

代码:

import java.util.regex.*;

public class eq {
    public static void main(String []args) {
        String str1 = "some=String&Here&modelId=324";
        Pattern rex = Pattern.compile(".*modelId=([0-9]+).*");
        Matcher m = rex.matcher(str1);
        System.out.println("id = " + m.group(1));
    }
}
Exception in thread "main" java.lang.IllegalStateException: No match found

共有1个答案

燕璞
2023-03-14

在调用group()和相关函数查询匹配的文本或操作它(start()end()appendreplacement(StringBuffer sb,String replacement)等)之前,需要在matcher上调用find()

所以在你的情况下:

if (m.find()) {
    System.out.println("id = " + m.group(1));
}

这将查找第一个匹配项(如果有的话),并提取regex匹配的第一个捕获组。如果要查找输入字符串中的所有匹配项,请将if更改为while循环。

 类似资料:
  • 我是不是漏掉了什么?提前感谢!

  • 我正在为我的 REST API 控制器编写测试,我需要检查返回的 对象中的 值,请参阅此测试方法: 但是测试产生了这个错误: 似乎ID被正确返回,但被序列化为不同的结构。 我的代码有什么问题?

  • 我们现在把注意力转向使用栈解决真正的计算机问题。你会这么写算术表达式 (5+6)*(7+8)/(4+3) 其中括号用于命令操作的执行。你可能也有一些语言的经验,如 Lisp 的构造 (defun square(n) (* n n)) 这段代码定义了一个名为 square 的函数,它将返回参数的 n 的平方。 Lisp 使用大量的圆括号是臭名昭著的。 在这两个例子中,括号必须以匹配的方式

  • 问题内容: 代码: 错误: 我在这里做错了什么? 问题答案: 你需要调用的,然后才能调用和相关的功能,大约匹配的文本查询或操纵它(,,等)。 因此,在您的情况下: 这将找到第 一个 匹配项(如果有),并提取由正则表达式匹配的第一个捕获组。如果要在输入字符串中查找所有匹配项,请更改为循环。

  • 最近,我为jaxb生成的元素做了一个自定义匹配器,遇到了这样的场景: 先决条件: 我有一个自定义Matcher,它扩展了BaseMatcher,覆盖了方法describeTo和DescribeMatch(当然还有matches…) 我使用的是assertThat(actualObject,而不是MyMatcherStaticRunMethod(expectedObject)) 当断言失败时,结果是

  • 就Spring security而言,它对我来说是全新的。我在网上找到了许多描述如何设置基本安全性的资源,并且能够让HTTPS REST调用在服务器端使用以下配置: 在我看来,这段代码允许访问路径及其下的任何内容,但似乎恰恰相反。我错过了什么? 注意:我要提到的另一件事是,目前没有“用户”身份验证。“客户端”不是基于web的,而是一个单独的Spring Boot服务,它有自己的客户端安全配置。 更