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

如何用ANTLR编写匹配任意字符直到FOOTER关键词的解析规则?

问题原因

你现有代码的核心错误有两点:

  • 词法规则中~[FOOTER \r\n]是字符集匹配逻辑,仅代表匹配单个不是F/O/O/T/E/R/空格/换行的字符,完全没有排除FOOTER关键词的效果
  • .*是贪心匹配逻辑,会直接吞掉所有输入到文件末尾,优先级高于你定义的FOOTER规则,导致FOOTER关键词永远不会被词法器识别
正确实现方案

推荐用ANTLR4的词法模式实现需求,逻辑清晰且边界控制准确,完整语法规则如下:

grammar CustomTextParser;

// 解析器规则
parse: headerPart contentPart footerPart restPart EOF;

headerPart: HEADER ':' .*? LINE_BREAK;
contentPart: CONTENT LINE_BREAK CONTENT_TEXT;
footerPart: FOOTER LINE_BREAK;
restPart: .*? END;

// 基础词法规则(默认模式)
HEADER: 'HEADER';
CONTENT: 'CONTENT' -> pushMode(CONTENT_SCAN_MODE);
FOOTER: 'FOOTER';
END: 'END';
LINE_BREAK: '\r'? '\n';
PLAIN_SPACE: [ \t]+ -> skip; // 若需要保留关键词外的空格可删除该行

// 内容扫描模式:仅匹配FOOTER之前的所有字符
mode CONTENT_SCAN_MODE;
MODE_FOOTER: 'FOOTER' -> type(FOOTER), popMode;
CONTENT_TEXT: .+?;
关键逻辑说明
  • 匹配到CONTENT关键词后自动切换到内容扫描模式,隔离其他词法规则的干扰
  • 内容模式下MODE_FOOTER规则优先级最高,命中后自动切回默认模式,且将token类型标记为FOOTER供解析器使用,FOOTER本身不会被计入内容
  • CONTENT_TEXT用非贪心匹配,自动包含所有数字、空格、特殊字符、换行等任意内容,直到碰到FOOTER关键词为止

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:36:03