我使用flex,linux / unix而不是Adobe类型,来生成小型扫描仪。在过去,我一直使用静态搜索字符串。我现在想提供一个命令行提供的搜索字符串,方法是通过getopt提供一个字符串,然后能够用它进行搜索。
旧的搜索方式是:
.*"_"\n ECHO;
查找以下划线结尾的行。
现在我想以这种方式搜索:
.*<arbitrary string>.*\n ECHO;
我不知道如何灵活接受<arbitrary string>
。我可以通过getopt获得它,但我无法灵活地接受我的语法。
我正在做的是一个特殊目的非常有限的grep我遇到的一个特殊问题。
任何帮助都将不胜感激。
答案 0 :(得分:1)
.*\n { if(strstr(yytext, "arbitrary string")) ECHO; else REJECT; }
如果yytext不包含“任意字符串”,则REJECT语句将跳到下一个规则。这当然不会提供与在编译时已知搜索字符串相同的性能。如果要实现自己的grep程序,glibc中的regcomp()/ regexec()可能比flex更快。