1

我使用 flex(不是 Adob​​e 类型的 linux/unix)来生成小型扫描仪。过去我一直使用静态搜索字符串。我现在想通过 getopt 提供一个字符串,然后能够使用它进行搜索,从而提供一个命令行提供的搜索字符串。

旧的搜索方式是:

.*"_"\n      ECHO;

查找以下划线结尾的行。

现在我想这样搜索:

.*<arbitrary string>.*\n    ECHO;

我不知道如何让 flex 接受<arbitrary string>. 我可以通过 getopt 获得它,但我无法让 flex 接受我的语法。

我正在做的是针对我遇到的特殊问题的特殊用途非常有限的 grep。

任何帮助,将不胜感激。

4

1 回答 1

1
.*\n { if(strstr(yytext, "arbitrary string")) ECHO; else REJECT; }

如果 yytext 不包含“任意字符串”,则 REJECT 语句将跳到下一条规则。这当然不会提供与在编译时已知搜索字符串相同的性能。如果您正在实现自己的 grep 程序,glibc 中的 regcomp()/regexec() 可能比 flex 更快。

于 2013-03-25T15:52:35.160 回答