为什么空正则表达式和空捕获组正则表达式返回字符串长度加一结果

2023-12-09

您如何解释空正则表达式和空捕获组正则表达式返回字符串长度加一结果?

Code

public static void main(String... args) {
    {
        System.out.format("Pattern - empty string\n");
        String input = "abc";
        Pattern pattern = Pattern.compile("");
        Matcher matcher = pattern.matcher(input);
        while (matcher.find()) {
            String s = matcher.group();
            System.out.format("[%s]: %d / %d\n", s, matcher.start(),
                    matcher.end());
        }
    }
    {
        System.out.format("Pattern - empty capturing group\n");
        String input = "abc";
        Pattern pattern = Pattern.compile("()");
        Matcher matcher = pattern.matcher(input);
        while (matcher.find()) {
            String s = matcher.group();
            System.out.format("[%s]: %d / %d\n", s, matcher.start(),
                    matcher.end());
        }
    }
}

Output

Pattern - empty string
[]: 0 / 0
[]: 1 / 1
[]: 2 / 2
[]: 3 / 3
Pattern - empty capturing group
[]: 0 / 0
[]: 1 / 1
[]: 2 / 2
[]: 3 / 3

正则表达式引擎被硬编码为在零长度匹配时前进一个位置(否则无限循环)。您的正则表达式匹配零长度子字符串。每个字符之间都有零长度的子字符串(想想“每个字符之间的间隙”);此外,正则表达式引擎还会考虑字符串的开头和结尾有效匹配位置。因为字符串的长度N包含N+1字母之间的间隙(计算正则表达式引擎所做的开始和结束),你会得到N+1火柴。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么空正则表达式和空捕获组正则表达式返回字符串长度加一结果 的相关文章

  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • 确定 C 字符串是否是 C 中的有效 int

    我需要检查 C 字符串是否是有效整数 我都尝试过 int num atoi str and int res sscanf str d num 但发送字符串 8 9 10 这两行都仅返回 8 而没有指示该字符串的无效性 谁能提出替代方案 看看
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • 磁模拟

    假设我在 n m 像素的 2D 表面上有 p 个节点 我希望这些节点相互吸引 使得它们相距越远吸引力就越强 但是 如果两个节点之间的距离 比如 d A B 小于某个阈值 比如 k 那么它们就会开始排斥 谁能让我开始编写一些关于如何随时间更新
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • 字符串数组文本格式化

    我有这个字符串 String text Address 1 Street nr 45 Address 2 Street nr 67 Address 3 Street nr 56 n Phone number 000000000 稍后将被使用
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • 如何修复 JNLP 应用程序中的“缺少代码库、权限和应用程序名称清单属性”?

    随着最近的 Java 更新 许多人都遇到了缺少 Java Web Start 应用程序的问题Codebase Permissions and Application name体现属性 尽管有资源可以帮助您完成此任务 但我找不到任何资源综合的
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O
  • Spring Boot @ConfigurationProperties 不从环境中检索属性

    我正在使用 Spring Boot 1 2 1 并尝试创建一个 ConfigurationProperties带有验证的bean 如下所示 package com sampleapp import java net URL import j
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐

  • JSON 到 PHP 关联数组

    你们中有人知道将其放入关联数组的好方法吗 我努力了json decode但发现并没有太大帮助 这是我需要放入关联数组的数据 data name Joe Bloggs id 203403465 name Fred Bloggs id 2547
  • IBM Worklight - 在哪里可以找到以前的版本

    我希望使用 IBM Worklight v5 0 5 Fix pack 1 设置 Eclipse 开发环境 我可以获得有关旧版本 Worklight 的安装链接的一些指示吗 请参阅下面的可用下载 请注意 这些链接并不能保证每次下载都是每个版
  • KeyHolder插入db2表后获取主键值

    再会 我在 db2 中有一个表 其中主表is autoincrement被设定为Yes 意味着每次向该表插入数据时 不需要传入主键值 因为它会自动生成 但是 我需要在插入后取回主键值 代码如下 public integer insertRe
  • PHP Traits:如何解决属性名称冲突?

    当类使用两个 Traits 时如何解决属性名称冲突同名属性 Example
  • 通过互操作接收字符串

    我无法从我编写的一些 C 代码中获取字符串 首先是一些通常不相关的背景信息 我想从 TAPI API 接收 TAPI TSP 的用户可读字符串 我已经实现了一个半可行的 TAPI 解决方案 依赖于将驱动程序名称与存储的字符串相匹配 但希望将
  • 尝试为 API Gateway 设置用户池身份验证

    我正在尝试使用 Cognito 用户池在 API 上设置安全性 我回来了 401 未经授权 API 和用户池已经存在 并且我一直在使用用户池登录应用程序 我现在正在尝试保护 API 调用的安全 我在 API 上创建了一个授权者 然后我将授权
  • 如何识别sql中的unicode文本?

    表 1 有一个名为 umsg 的 nvarchar 列 其中包含 unicode 文本 有时还包含英语 我想找出 umsg 列中存在的英文文本 select from table1 where RDate gt 01 01 2014 and
  • Fraction 对象没有 __int__ 但 int(Fraction(...)) 仍然有效

    在Python中 当你有一个对象时 你可以使用以下命令将其转换为整数 int功能 例如int 1 3 将返回1 这在内部通过使用 int 在这种特殊情况下 对象的魔术方法float int 在Python中Fraction对象可用于构造精确
  • 更改气球图中点的大小并保持零值

    有了这些数据 Data lt structure list ObsVal c 22L 50L 8L 15L 54L 30L 11L 90L 6L 53L 9L 42L 72L 40L 60L 58L 1L 20L 37L 2L 50L 68
  • 如何部署 IBM Filenet P8 订阅?

    在我当前使用 Filenet P8 Content Platform Engine 5 2 1 和 WebSphere 8 5 5 3 的项目中 我想知道如何将内容引擎订阅部署到系统 我搜索了 IBM 文档 但它告诉我如何建立订阅 但没有告
  • Python:使用正则表达式从字符串中解析数值

    我正在编写 python 代码来使用正则表达式从字符串中解析不同类型的数字 但遇到了一个我不明白的恼人问题 我的代码如下 import re test string Distributions 54 00 bob 26 and 0 30 5
  • 有没有简单的 awk/sed 方法来打印 YAML 文件中的列表?

    我正在寻找一种优化方法来使用 sed 或 和 awk 打印 YAML 文件中的特定列表 例如 在下面的示例 yaml 文件中 如何单独打印在屏幕上的水果列表 例如 以逗号分隔 输入文件 boston mart yaml 我能够使用 awk
  • 如何自动更新在powershell中运行的后台作业的数量?

    我在 powershell 中运行的后台作业很少 我正在尝试找到一种方法来获取作业 正在运行 和 已完成 的计数 一旦作业完成 该计数就会自动更新 function jobDetails d Get Job Measure Object P
  • 使用 json.dump 引发 JSONDecodeError("Extra data", s, end)

    我需要创建一个包含许多 json 的 json 文件 例如 我实际上可以创建该文件 但是当我尝试读取它时 出现此错误 raise JSONDecodeError Extra data s end JSONDecodeError Extra
  • 在 ASP.Net Core 中间件中调用服务/存储库方法

    ASP Net Core 菜鸟在这里 我正在使用 ASP Net Core WebAPI 核心项目 该项目使用 DNX451 和 EF 6 我需要在我们的服务中实现 API 密钥身份验证 为此 我创建了中间件 该中间件从请求中获取信息并继续
  • 跟踪数据库查询时间 - Bookshelf/knex

    我想监控 API 数据库查询所花费的时间 我因此使用书架信号 一个书架插件 创建了以下函数 bookshelf on fetching gt server app fetching new Date valueOf bookshelf on
  • Git 推送提醒/帮助器?

    有时我需要 为了使我的开发更快 在我的代码中编写一些东西 这可以是凭证 也可以只是允许我测试某些功能的黑客攻击 由于多种原因 我从来不想将此代码推送到主代码库甚至开发分支 一段时间以来 我一直在使用 git assume unchaged
  • Scikit 网格搜索 KNN 回归 ValueError:数组包含 NaN 或无穷大

    我正在尝试使用 Scikit learn 实现网格搜索来选择 KNN 回归的最佳参数 特别是我正在尝试做的事情 parameters weights uniform distance n neighbors 5 10 20 30 40 50
  • 从数百万个 GPS 坐标中确定国家/地区的最快方法 [R]

    我有数百万个 GPS 坐标 想要快速添加坐标所在国家 地区的列 我当前的方法有效 但速度非常慢 library data table REPRODUCE DATA data lt data table latitude sample seq
  • 为什么空正则表达式和空捕获组正则表达式返回字符串长度加一结果

    您如何解释空正则表达式和空捕获组正则表达式返回字符串长度加一结果 Code public static void main String args System out format Pattern empty string n Strin