(f)lexを使用して、すべてのリテラルを並列に認識するDFAを生成できます。ワイルドカードが多すぎる場合、これは注意が必要になる可能性がありますが、最大で約100リテラル(4文字のアルファベットの場合。おそらく自然なテキストの場合はそれ以上)で機能します。デフォルトのアクション(ECHO)を抑制し、一致する行と列の番号のみを出力することもできます。
[grep-Fはほぼ同じことをすると思います]
%{
/* C code to be copied verbatim */
#include <stdio.h>
%}
%%
"TTGATTCACCAGCGCGTATTGTC" { printf("@%d: %d:%s\n", yylineno, yycolumn, "OMG! the TTGA pattern again" ); }
"AGGTATCTGCTTCAATCAGCG" { printf("@%d: %d:%s\n", yylineno, yycolumn, "WTF?!" ); }
...
more lines
...
[bd-fh-su-z]+ {;}
[ \t\r\n]+ {;}
. {;}
%%
int main(void)
{
/* Call the lexer, then quit. */
yylex();
return 0;
}
上記のようなスクリプトは、awkまたはその他のスクリプト言語を使用してtxt入力から生成できます。