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
相关推荐
掘金者阿豪几秒前
从“多库掣肘”到“一库平川”:金仓KingbaseES的融合数据库深度体验
后端
Java编程爱好者13 分钟前
面试被问 Redis?这 3 个问题 90% 的人都答不对
后端
金牌归来发现妻女流落街头15 分钟前
【Spring AMQP 三大交换机】
后端·spring
重庆小透明22 分钟前
微服务,不仅仅是“小服务”
java·后端·spring cloud·微服务·云原生·架构
孟沐24 分钟前
JDBC 入门大白话文档
后端
李长渊哦24 分钟前
OpenClaw 本地部署完全指南:从环境验证到启动运行
后端·arcgis
Java编程爱好者25 分钟前
Spring Boot 中关于 Bean 加载、实例化、初始化全生命周期的扩展点
后端
七牛云行业应用28 分钟前
别瞎折腾了!4 步排查法,手把手教你搞定 OpenClaw Skills 各种安装报错
后端·openai·agent
Java编程爱好者29 分钟前
DBA 经验:MySQL性能最重要的参数只有2个!
后端
武子康39 分钟前
大数据-245 离线数仓 - 电商分析 Hive 拉链表入门实战:缓慢变化维 SCD 类型、建表加载与常见错误速查
大数据·后端·apache hive