まず、いくつかの言語での正規表現の内部に関する記事を読むことをお勧めします。正規表現のマッチングは単純で高速です。
多くの言語の正規表現は照合用であるだけでなく、グループキャプチャと逆参照の可能性も提供するため、ほとんどすべての実装では、特定の正規表現から構築されたNFAを実行するときに、いわゆる「バックトラッキング」を使用します。そして、この実装には指数関数的な時間計算量があります(最悪の場合)。
DFA(グループキャプチャを使用)を介してREを実装することもできますが、オーバーヘッドがあります(Laurikariの論文「タグ付き遷移を使用したNFA、決定性オートマトンへの変換、および正規表現への適用」を参照)。
単純な部分文字列検索の場合、DFAを構築して部分文字列を検索するKnuth-Morris-Prattアルゴリズムを使用できます。これは、最適なO(len(s))の複雑さを備えています。ただし、オーバーヘッドもあります。実際の単語やフレーズ(それほど反復的ではない)でこの最適なアルゴリズムに対してナイーブアプローチ(O(nm))をテストすると、平均してナイーブアプローチの方が優れていることがわかります。
正確な部分文字列検索については、ボイヤー-ムーア文字を試すこともできます。これは、O(mn)の最悪の場合の複雑さを持ちますが、実際のデータでは平均してKMPよりもうまく機能します。