作って学ぶ正規表現 -やさしいSwift Regex入門- by 岸川克己

iOSDC Japan 2025
レギュラートーク(40分)

作って学ぶ正規表現 -やさしいSwift Regex入門-

k_katsumi 岸川克己 k_katsumi
5

SwiftではSwift RegexとNSRegularExpressionという二つの正規表現エンジンが利用できます。しかし、SwiftUIとUIKitの関係と同じく、新しい方が常に正解ではありません。サポートする機能が異なるので、単純な置き換えはできません。パフォーマンスの観点からはSwift Regexの方が多くのケースで遅いことも分かっています。

しかし、この2つの正規表現エンジンはどちらもバックトラック型の実行方式のため、仕組み上、正規表現の書き方がパフォーマンスに大きく影響します。どちらを利用するかを適切に選択するには、単純なベンチマークで決まるものではなく、正規表現エンジンが文字列をマッチする原理と仕組みの理解が重要です。

Swift Regexはオープンソースなので、ソースコードを読むことも可能ですが、一般的なアプリケーションコードとは大きく異なるため読み解くことは容易ではありません。(NSRegularExpressionも実装はICUなのでソースコードは読めます。)

また、Swift Regexは更新頻度が落ちており、SE-0448など承認済みの改善であってもいまだ未実装の機能が存在するため、自ら改善に貢献したいという人も多いでしょう。

そこで本講演ではSwift Regexとまったく同じ構成で、機能だけを「連接・選択・繰り返し」の基本三演算に限定した最小の正規表現エンジンをゼロから実装します。限定版といっても、正規表現は基本三演算さえ実装すれば理論上はフル機能の正規表現と同じ表現力を持つので、実用性は変わりません。

自分で実装することは動作の原理や仕組みを学ぶための最適な手法です。正規表現が動作する仕組みを理解することで、技術選択に確信が持てます。また、公式の実装を読み解き、機能の拡張へ貢献するための第一歩となります。