Open wxy3265 opened 2 weeks ago
按照 mongodb 的文档 mongo使用的是 pcre2,需要完全相同的话可能需要引入 pcre4j 库,样例代码如下
val pcre2 = Pcre2()
val errCode = intArrayOf(0)
val errOffset = longArrayOf(0)
val code = pcre2.compile("(ab", 0, errCode, errOffset, 0);
require(code != 0L) {
"PCRE2 compilation failed with error code ${errCode[0]} at offset ${errOffset[0]}"
}
pcre2.codeFree(code)
kotlin-stdlib 中的 Regex 默认使用的是平台的正则库(JVM上就是java的这个Pattern类了)
速度上使用pcre2(这个库)会比直接用Pattern慢不少(大概慢20倍)
不过我个人认为这个性能慢也是可以接受的(在我的设备上简单预热后粗糙估计,平均一下耗时大概不到 0.01ms),或许可以考虑引入这个库。
PS: 同时我尝试了一下 ffm 版本,这个库的 ffm 版本只能通过 java 21 + preview 参数才能使用,升级 java 版本会不兼容,性能也比jna版本更差,可以无脑选择 jna 版本。
Java原生的正则表达式解析工具方法Pattern.compile()可以按照正则表达式解析字符串,该方法在正则表达式不合法时会抛出PatternSyntaxException。因此在按照正则表达式查询之前尝试调用该方法,若捕获到PatternSyntaxException异常说明解析失败,即表达式不合法,返回包括400状态码和错误信息的fail结果。