antlr4 正则表达式生成器4解决其他问题

1、解决头部带有^和尾部带$

生成ipv4 地址

java 复制代码
^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)$

// ipv4
System.out.println(RegexUtil.gen("^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)$"))

生成结果如下:

ruby 复制代码
^255\.250\.204\.103$

由于我们的正则生成器,所有对于头部和尾部约束可以删除处理

java 复制代码
if (regex.startsWith("^")) {
    regex = regex.substring(1);
}
if (regex.endsWith("$")) {
    regex = regex.substring(0,regex.length()-1);
}

生成结果如下:

复制代码
253\.254\.230\.200

2、解决上面多了\问题

. 树的遍历如下:

所以关键问题是找打 SingleCharEsc 的处理

很显然对于这个字符的处理,. 结果只需要返回 .即可 跳过第一个字符即可。

scss 复制代码
public String visitCharClassEsc(regexParser.CharClassEscContext ctx) {

    // 单字符
    if (ctx.SingleCharEsc() != null) {
        negRecords.add(new String[]{ctx.SingleCharEsc().getText().substring(1),ctx.SingleCharEsc().getText().substring(1)});
        return ctx.SingleCharEsc().getText().substring(1);
    }

最终生成结果如下:

复制代码
30.86.200.251
相关推荐
明月_清风1 小时前
vLLM 深度实战:2026 年生产级 LLM 推理引擎完全指南
前端·后端·ai编程
吃饱了得干活2 小时前
限界上下文之后:微服务怎么拆、上下文怎么聊?
java·后端·架构
星火10242 小时前
【Groovy翻译-进阶篇】运行时元编程与编译时元编程(上)
后端·groovy
CHHH_HHH2 小时前
【Linux系统篇】深入解析Linux文件系统:从磁盘寻址到软硬链接
linux·服务器·开发语言·后端·ubuntu
星火10242 小时前
【Groovy翻译-进阶篇】运行时元编程与编译时元编程(下)
后端·groovy
用户106911794102 小时前
SpringSercuirty整合jwt
后端
岁月如歌77862 小时前
一次讲透 Redis 缓存击穿、穿透、雪崩,从原理到实战解决方案
java·后端·架构
IT_陈寒2 小时前
Vue的v-for为啥把我的渲染顺序搞乱套了?
前端·人工智能·后端
用户106911794102 小时前
SpringSecuirty自定义接口或者资源权限
后端
桌角的眼镜3 小时前
5\.28文章改写:用 Claude Code 接入 GLM\-5\.1:从安装到终端实战的完整配置指南
后端·程序员·github·开发工具·效率工具