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
相关推荐
掘金码甲哥3 分钟前
MetalLB才是给Ingress这个老登做负重前行的那个男人
后端
野犬寒鸦12 分钟前
从零起步学习计算机操作系统:内存管理篇
服务器·后端·学习·缓存·面试
计算机学姐14 分钟前
基于SpringBoot的中药材店铺管理系统
java·vue.js·spring boot·后端·spring·tomcat·推荐算法
青柠代码录15 分钟前
【MySQL】事务:如何使用事务
后端
yinyan131426 分钟前
一起学springAI系列一:使用多种聊天模型
java·人工智能·spring boot·后端·spring·springai
dreamxian33 分钟前
苍穹外卖day07
java·spring boot·后端·spring·mybatis
陈随易1 小时前
MoonBit访谈:MoonBit开发moonclaw实现“养虾”自由
前端·后端·程序员
aq55356001 小时前
Spring Boot中的404错误:原因、影响及处理策略
java·spring boot·后端
未秃头的程序猿1 小时前
面试官:谈谈你对 MySQL 执行计划的理解?
后端·mysql·面试
BUG?不,是彩蛋!1 小时前
AI智慧社区--从0到1开发柱状图数据接口
java·spring boot·后端·intellij-idea·mybatis