You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写可匹配符合JLS 17规范的所有Java整数字面量的正则表达式

匹配Java整数字面量的正则方案

完全存在符合要求的正则表达式,可以覆盖JLS 17定义的所有合法Java整数字面量,且适配Matcher.find()的逐次扫描逻辑,不需要额外处理就能自动跳过前后的无关字符、分隔符。

最终正则表达式

String regex = "\\b(?:0[xX](?:_?[0-9a-fA-F])+|0[bB](?:_?[01])+|0(?:_?[0-7])+|[1-9](?:_?[0-9])*|0)(?:[lL])?\\b";

规则说明

这个正则完全对齐JLS 17的整数字面量定义,覆盖四类合法格式,同时严格过滤非法写法:

  • 支持十进制、八进制、十六进制、二进制四种字面量格式
  • 允许数字之间插入任意数量的下划线做分隔,不会匹配开头/结尾/前缀后紧跟下划线的非法写法
  • 支持可选的l/L后缀标记long类型
  • 自动忽略前缀减号,和你要求的仅匹配数字部分的规则一致

匹配效果验证

你给出的示例全部可以正常匹配:

  • -1:仅匹配到1,减号不会被纳入结果
  • 0x00_00_00_0F:完整匹配整串
  • 0b0000_1111:完整匹配整串
  • 017:完整匹配整串

其他合法字面量比如123_456、0xFFL、0b1010l、0123_456也都可以正常识别。

使用方式

直接用该正则创建Pattern对象,循环调用Matcher.find()即可逐个提取字符串中所有符合要求的整数字面量。


内容的提问来源于stack exchange,提问作者Maarten Bodewes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:36:04