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
相关推荐
小月土星2 分钟前
当 LLM 遇上集装箱:我的 Docker 学习笔记与 AI 后端的思考(含反向代理Nginx)
后端·docker·容器
bytemaster3 分钟前
SSH 连接被秒断?从握手失败到跳板机自动中转的完整排查路径
后端·架构
smallswan5 分钟前
《Rust七十二变》开源了
开发语言·后端·rust·ai编程
想要成为糕糕手8 分钟前
🚀 NestJS 完全入门指南: Module/Controller/Service讲解 + 实战 CRUD
后端·nestjs
开心就好20258 分钟前
appuploader-cli 使用教程:在 Windows 上用命令行把 IPA 上传到 App Store
后端·ios
倾颜10 分钟前
Node.js 为什么会慢?从 Event Loop、CPU、内存到并发控制聊性能问题
后端
用户9210802628611 分钟前
AI 应用平台为什么要拆分 Java 后端和 Python AI 服务
后端
星火102420 分钟前
【LangChain4j系列08】Agentic AI 多智能体协作
人工智能·后端
凤山老林24 分钟前
零停机数据库演进:Spring Boot 集成 Flyway 与平滑DDL变更策略
数据库·spring boot·后端
步行cgn26 分钟前
MyBatis <sql> 标签详解:SQL 片段的定义与复用
后端