由MQTT topic的正则表达式匹配引发的特殊字符"/"匹配思考
2024-10-20 03:30:58
正则表达式中的'/'替换
近期项目对接OneNET
的MQTT物联网套件
,需要完成命令下发流程.
流程要求:
(1)设备在接收平台下发的命令(topic
为$sys/{pid}/{device-name}/cmd/request/{cmdid}
);
(2)上传响应至$sys/{pid}/{device-name}/cmd/response/{cmdid}
.
初次尝试
在项目编码中,需要对命令的topic
进行正则表达式匹配,以便完成后续响应返回工作.
原正则表达式如下所示:
// 注册的命令topic为$sys/{pid}/{device-name}/cmd/#
String topicForRegex = topic.replaceAll("\\+", "[^/]+").replaceAll("#", "(.+)") + "$";
此处,使用.+
替换#
,以便匹配cmd/
后续任意字符.
然而,匹配失败.
正则表达式修改
将正则表达式放置于https://regex101.com/
进行检验,发现正则表达式存在问题.
其中右下角提示错误,需要对正则表达式中的/
进行替换,修改为如下样式:
原正则表达式中,存在特殊字符/
以及$
,需要对其进行转义处理,即修改为\/
以及\$
.
因此代码修改为如下格式:
// 注册的命令topic为$sys/{pid}/{device-name}/cmd/#
if (topic.startsWith("$")) {
topic = "\\" + topic;
}
String topicForRegex = topic
.replaceAll("/", "\\\\/")
.replaceAll("\\+", "[^/]+")
.replaceAll("#", "(.+)") + "$";
此处,需要注意/
字符替换,需要使用\\\\/
进行(具体可参考https://stackoverflow.com/questions/13153697/how-to-replace-with-in-a-java-string).
PS:
如果您觉得我的文章对您有帮助,请关注我的微信公众号,谢谢!
最新文章
- 数据库备份并分离日志表(按月)sh 脚本
- 初探AngularJS
- 【转】MVC、MVP与MVT
- asp.net在线预览txt文件(简单实现)
- 解决Oracle在scott用户下创建视图(VIEW)权限不足的方法
- Golang下的Log处理
- selenium webdriver学习(一)
- PHP基础示例:商品信息管理系统v1.1[转]
- Linux网络编程8——对TCP与UDP的简易封装
- 转:移动开发中一些bug及解决方案
- transition Css3过度详解
- 依赖注入及AOP简述(十三)——AOP应用举例(完结) .
- HDU 4296 Buildings (YY)
- 数据结构《21》----2014 WAP 第一个问题----Immutable queue
- [HTTP] PHP 实现 HTTP Server 原理
- 浅谈ASP.NET配置文件加密
- vi 命令 行首、行尾
- register form
- Neo4j 第三篇:Cypher查询入门
- [PHP]Nginx与PHP的文件上传大小限制
热门文章
- JDOJ 1958 机器分配
- 2.GO-可变参数函数、匿名函数和函数变量
- 题解 P2668 【斗地主】
- [POI2014]RAJ(最短路,拓扑排序)
- 来吧!一文彻底搞定Vue组件!
- [LeetCode] 119. Pascal's Triangle II 杨辉三角之二
- DVWA Command Injection 通关教程
- Linux中Too many open files 问题分析和解决
- Collection和Collections有什么区别?
- mysql Duplicate entry '9223372036854775807' for key 'PRIMARY'