如何仅打印使用 LEX 从字符串中识别的特定字符

How to print only specific characters recognized from a string with LEX

您好,我正在研究 LEX。当正则表达式对应的词组在特定字符串中时,原样输出。有没有办法只输出正则表达式对应的部分?

例如我写了一个识别nice的正则表达式。 当输入字符串 nice to meet you 时,如果有 nice,我想原样输出 nice。 但是现在,当我 运行 我写的代码时,整个输入是一起执行的,而不是特定的单词。有什么办法吗?

代码:

%%
nice printf("%s","target");

input.txt:

nice to meet you 

输出:

target to meet you

您需要问的问题是 flex 如何处理与您提供的任何模式都不匹配的输入部分。答案是它使用它的 default rule,匹配任何单个字符 并将其回显到标准输出 .

因此,如果您不希望这种情况发生,则必须确保匹配所有内容,并明确忽略您不想对其执行任何其他操作的内容。

您可以使用这样的回退规则(在您的规则末尾):

.|\n      /* Do nothing */