如何使用LEX仅输出字符串中与正则表达式匹配的特定字符?
LEX仅输出匹配内容的解决方法
问题原因
LEX默认存在兜底输出逻辑:所有没有被你自定义的匹配规则命中的输入字符,都会直接原样输出到标准输出,这就是你当前除匹配到的nice外剩余内容也被输出的核心原因。
解决方法
在规则段的最后添加一条兜底匹配规则,命中所有未被前面规则匹配的字符,且动作为不做任何输出即可。注意兜底规则必须放在所有自定义规则的最后,LEX会按从上到下的顺序优先匹配更靠前的规则。
修改后示例代码
%% /* 原有匹配规则,匹配到目标内容后输出你需要的内容 */ nice printf("%s", "target"); /* 兜底规则:匹配除换行外的任意单个字符、换行,动作直接为空不输出 */ .|\n ; %%
扩展说明
如果你需要输出匹配到的原内容而非固定的target,可以直接使用LEX内置的yytext变量,该变量存储了当前命中规则的匹配字符串,规则可修改为:
nice printf("%s", yytext);
修改后再运行,输入nice to meet you时,仅会输出你匹配规则中指定的内容,不会输出其余未匹配的字符。
内容的提问来源于stack exchange,提问作者user9178840
相关产品推荐
相关产品推荐

