はじめに 正規表現が文字列にマッチするかどうかを判定するプログラムを作るにあたっては、以前の記事で紹介したようにVMを用いたり、または正規表現と等価なオートマトンを用いたりする。この記事ではこれらとは別の方法として「正規表現の微分(regular expression derivative)」を用いた方法について説明し、さらにこの方法を使うことで今までの方法では触れていなかった、正規表現のある一部にマッチした文字列を抽出するサブマッチングについても紹介する。 また、この記事で紹介するコードは次のGitHubリポジトリから入手できる。 https://github.com/y-yu/PosixRegex 正規表現の抽象構文木 まずは、正規表現の抽象構文木を表す代数的データ型を次のように定義する。 sealed trait Regex object Regex { case class Var
