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
相关推荐
uzong3 分钟前
这套AI技术栈可将你的人工智能成本削减80%
人工智能·后端·架构
candyTong8 小时前
Claude Code Agent Teams:多 Agent 协作的生命周期与实现机制
后端·架构
IT_陈寒13 小时前
为什么你应该学习JavaScript?
前端·人工智能·后端
淇奥713 小时前
【MyBatis-Plus】MyBatis-Plus 学习笔记
后端
_code_bear_13 小时前
OpenSpec CLI 与 OPSX 工作流说明
前端·后端·架构
用户83562907805114 小时前
使用 Python 在 PowerPoint 中添加并控制音频播放
后端·python
用户83562907805114 小时前
使用 Python 在 PowerPoint 中生成并自定义饼图与环形图
后端·python
念何架构之路14 小时前
Go语言常见并发模式
开发语言·后端·golang
Cosolar14 小时前
大模型应用开发面试 • 第4期|A2A、复杂挑战与具身智能
人工智能·后端·面试
迷渡15 小时前
聊一聊 Bun 用 Rust 重写这件事
开发语言·后端·rust