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
相关推荐
索荣荣12 小时前
Java Session 全面指南:原理、应用与实践(含 Spring Boot 实战)
java·spring boot·后端
千寻技术帮13 小时前
10333_基于SpringBoot的家电进存销系统
java·spring boot·后端·源码·项目·家电进存销
dear_bi_MyOnly13 小时前
【多线程——线程状态与安全】
java·开发语言·数据结构·后端·中间件·java-ee·intellij-idea
小信丶14 小时前
@EnableTransactionManagement注解介绍、应用场景和示例代码
java·spring boot·后端
To Be Clean Coder15 小时前
【Spring源码】createBean如何寻找构造器(四)——类型转换与匹配权重
java·后端·spring
-孤存-15 小时前
SpringBoot核心注解与配置详解
java·spring boot·后端
2301_8187320616 小时前
项目启动报错,错误指向xml 已解决
xml·java·数据库·后端·springboot
小王不爱笑13216 小时前
SpringBoot 整合 Ollama + 本地 DeepSeek 模型
java·spring boot·后端
短剑重铸之日17 小时前
《设计模式》第七篇:适配器模式
java·后端·设计模式·适配器模式
树码小子19 小时前
SpringIoC & DI (1):IOC介绍 & Spring IoC使用 & DI
java·后端·spring