You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RPLY词法分析器适配的支持嵌套的非贪婪字符串正则匹配方案咨询

解决方案

1. 正则替换(完全无分组,非贪婪匹配)

你原来的正则使用了非捕获组、捕获组且默认贪婪,不符合要求,直接替换为无分组的非贪婪版本即可:

  • 单行字符串用:`.*?`
  • 多行字符串(支持换行)用:`[\s\S]*?`

上述正则没有任何分组,完全符合RPLY的限制,*?是非贪婪匹配标识,会在遇到第一个闭合反引号时就停止匹配,不会跨多个字符串吞掉中间内容。

2. 支持内部嵌套反引号

如果需要字符串内部可以嵌套反引号,参考Markdown围栏字符串的逻辑,按反引号数量从多到少添加多条STRING规则即可,优先匹配更长的边界:

# 3个反引号边界,内部可嵌套1、2个反引号
self.__lexer.add('STRING', r'```[\s\S]*?```')
# 2个反引号边界,内部可嵌套1个反引号
self.__lexer.add('STRING', r'``[\s\S]*?``')
# 1个反引号边界
self.__lexer.add('STRING', r'`[\s\S]*?`')

只要内部反引号的连续数量少于边界的反引号数量,就不会被误判为字符串结束符。

3. 词法规则顺序调整

必须把STRING的规则添加在OPEN_STATEMENT、CLOSE_STATEMENT规则之前,RPLY的词法分析器会按添加顺序优先匹配先注册的规则,这样字符串内部的{、}就会被识别为STRING的内容,不会被拆成独立的语法符号。

4. 后续处理保持不变

你现有的__removeFirstLast工具函数可以正常使用,正则匹配到的STRING token会完整保留首尾的反引号,调用该函数即可去掉边界符号,拿到内部的字符串内容,不需要额外修改解析逻辑。


内容的提问来源于stack exchange,提问作者acaiberii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:06:03