Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix:在作业查询接口加入了正则表达式的格式检查,若格式错误则返回400状态码及正则表达式不合法信息 #174

Open
wants to merge 1 commit into
base: dev
Choose a base branch
from

Conversation

wxy3265
Copy link

@wxy3265 wxy3265 commented Nov 3, 2024

Java原生的正则表达式解析工具方法Pattern.compile()可以按照正则表达式解析字符串,该方法在正则表达式不合法时会抛出PatternSyntaxException。因此在按照正则表达式查询之前尝试调用该方法,若捕获到PatternSyntaxException异常说明解析失败,即表达式不合法,返回包括400状态码和错误信息的fail结果。

@@ -272,6 +272,7 @@ class CopilotService(

// 标题、描述、神秘代码
if (!request.document.isNullOrBlank()) {
Pattern.compile(request.document)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

java 支持的 regex 与 mongodb 所支持的并不相同,有没有更好的检测方法

@dragove
Copy link
Member

dragove commented Nov 17, 2024

按照 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 版本。

@dragove
Copy link
Member

dragove commented Nov 28, 2024

我又去 java 23 上测试了一下不引入依赖,直接手写 FFM 的性能,耗时大概只有直接使用 Pattern.compile 的 3 倍,也可以考虑这个方案,不过得先升级应用的jdk版本了。23的FFM比21快太多了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants