当前位置: 首页 > 面试题库 >

匹配器的matchs()方法返回false,find()和groupCount()返回结果

姚棋
2023-03-14
问题内容

我有以下代码:

private static final String ET_AL = "(\\p{Punct}|\\b|^|\\s)et\\.? al\\.?(\\b|$|\\s)";
private static final Pattern ET_AL_PATTERN = Pattern.compile(ET_AL, Pattern.CASE_INSENSITIVE);

Matcher m = ET_AL_PATTERN.matcher("Doe, J.; Brown, C.; et al");
while(m.find()) {
    System.out.println(m.group());
}
m.reset();
System.out.println(m.matches());

循环显示“ et al”,但对m.matches()的调用返回false。而且m.groupCount()返回2。有关发生了什么的任何帮助?


问题答案:

但是对m.matches()的调用返回false。

这是因为Matcher#matches()要求您将完整的输入与正则表达式匹配。

从Javadoc:

布尔布尔Match()

尝试根据图案匹配整个区域。如果匹配成功,则可以通过开始,结束和分组方法获取更多信息。



 类似资料:
  • 我试图解析这样的字符串; /^/^这是一个大/*这是一个粗体文本/-这是删除。我需要$/^和$之间的文本 在regexr和java regex tester上对regex进行了测试,并显示了它的工作状态。

  • 问题内容: 我能找到的所有带有猫鼬结果的页面都可以做到这一点: 如何从查询中返回结果,更像这样? 这样我就可以在页面上发布多个结果? 喜欢: 能做到吗? 问题答案: 您正在尝试强制执行同步范例。就是行不通。node.js是单线程的,大部分情况下- 完成io后,便产生了执行上下文。信令通过回调进行管理。这意味着您具有嵌套的回调,命名函数或流控制库,以使外观看起来更好。 https://github.

  • 问题内容: 我有一个使用名为Todo的模型的路由设置,如下所示: 但是,todos.length始终为0,因为它找不到任何结果。当我跑步时: 我确定我已连接到同一数据库。我可以在mongod控制台中看到连接。我的连接位于config / db.js文件中: 我的server.js中的连接如下: 在Mongo Shell中,我得到1个结果。我期望此结果将由find查询返回。有什么我想念的吗?我正在使

  • 我正在创建一个用户可以登录的网站。当他们创建帐户时,我将哈希密码保存在数据库中。我正在尝试使用password_verify()来确认密码匹配,但它返回false。 为了确认它们匹配,我打印出用户输入的哈希版本和存储在数据库中的哈希密码。我知道一个常见的问题是数据库密码字段对于散列密码来说太小,但我尝试将其设置为VARCHAR(256)和TEXT,以确保存储整个散列密码。 我希望password_

  • 问题内容: 我有两个实体。一个继承自另一个。 例: 当我在EntityManager上使用现有汽车ID调用find()时,如下所示: 我得到了一个代理对象,但是我需要访问CarEntity类的特殊方法,因为我想设置一些新参数。 有人可以帮我吗? 当然,这只是一个示例问题。更具体地说:在调用find之后,我正在检查返回对象的实例,如果它是“ CarEntity”,则我设置参数,否则,我什么也不做。除

  • 问题内容: 在我的程序中,我有一个字符串(从外部库获取),该字符串与任何正则表达式都不匹配。 知道有什么问题吗?当我打印到标准输出时,看起来还可以。 这是从PDF提取文本的代码(我正在使用iText 5.0.1): 问题答案: 默认情况下,不匹配的换行符。所以我的猜测是您包含换行符。 还要注意,它将匹配整个字符串,而不仅仅是字符串的一部分:它不会做什么! 一些例子: 在最后一个例子将导致匹配换行符