String Matching with Finite Automata