gpt4 book ai didi

java - 如何编写一个可以匹配整个函数的正则表达式 @Prompt (…) 无论在 () 内写什么,即使它包含另一个 ()

转载 作者:行者123 更新时间:2023-12-01 17:55:09 29 4
gpt4 key购买 nike

例如,我想替换 SQL 查询中的任何提示函数我用过这个表达

Query = Query.replaceAll("@prompt\\s*\\(.*?\\)", "(1)");

此表达式在此示例中有效

@Prompt('Bill Cycle','A','MIGRATION\BC',,,)

@Prompt('账单周期','A','MIGRATION\BC',,,)

输出为(1)

但是当它在此示例中不起作用时

@Prompt('Groups','A','[Lookup] Price Group (2)\Nested Group',,,)

输出是无效的(1)\Nested Group',,,)

最佳答案

遗憾的是,正如 Joe C 在评论中指出的那样,您尝试做的事情不能在任意深度括号的正则表达式中完成。原因是正则表达式无法“计数”。为此,您需要一个堆栈机,或者一个上下文无关的语言解析器。

但是,您还建议“提示”内容始终位于单引号内。我假设下面是标准的 Java regexp 库。其他正则表达式库可能需要翻译...

"@Prompt\\('[^']*'(\s*,\s*(('[^']*')|([^',)]*)))*\\)"

因此,您正在提示中搜索单引号文本 block 。搜索假定内容的每个内部位都用单引号引起来。

https://regex101.com/r/nByy0Y/1处验证(我做了一些修复)。请注意,在 regex101.com 中,它将把双反斜杠视为文字反斜杠。相反,您想要的只是引用括号,这样您就需要一个文字括号。

关于java - 如何编写一个可以匹配整个函数的正则表达式 @Prompt (…) 无论在 () 内写什么,即使它包含另一个 (),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45643657/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com