由MQTT topic的正则表达式匹配引发的特殊字符"/"匹配思考
时间:2019-09-26
本文章向大家介绍由MQTT topic的正则表达式匹配引发的特殊字符"/"匹配思考,主要包括由MQTT topic的正则表达式匹配引发的特殊字符"/"匹配思考使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
正则表达式中的'/'替换
近期项目对接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).
原文地址:https://www.cnblogs.com/jason1990/p/11589297.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- php实现的数组转xml案例分析
- Laravel框架Auth用户认证操作实例分析
- yii2实现Ueditor百度编辑器的示例代码
- PHP下载文件函数与用法示例
- php实现银联商务公众号+服务窗支付的示例代码
- php使用json-schema模块实现json校验示例
- 17个品牌,113款5G手机,5G离我们越来越近。
- PHP的cookie与session原理及用法详解
- Thinkphp5.0框架视图view的循环标签用法示例
- Thinkphp5.0 框架视图view的比较标签用法分析
- laravel 操作数据库常用函数的返回值方法
- laravel 验证错误信息到 blade模板的方法
- thinkPHP+LayUI 流加载实现功能
- Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
- laravel5.2表单验证,并显示错误信息的实例