正規表現
これは空記号列 ε {\displaystyle \varepsilon } のみからなる集合 { ε } {\displaystyle \{\varepsilon \}} を表す。
正規表現 ε {\displaystyle \varepsilon } の表す集合は正規表現 ∅ ∗ {\displaystyle \varnothing *} の表す集合に等しいので、 ε {\displaystyle \varepsilon } を正規表現の定義に含めなくても ∅ ∗ {\displaystyle \varnothing *} で代用できる。
X ∣ Y {\displaystyle X\mid Y} の代わりに X + Y {\displaystyle X+Y} と書くことや、 X Y {\displaystyle XY} の代わりに X ⋅ Y {\displaystyle X\cdot Y} と書くこともある。また、「 ∣ {\displaystyle \mid } 」や「 ∗ {\displaystyle *} 」の優先順位を明確にするために、補助的なカッコも(上述の定義には含めていないが)必要である。
正規表現(せいきひょうげん、英: regular expression)は、文字列の集合を一つの文字列で表現する方法の一つである。正則表現()とも呼ばれ、形式言語理論の分野では比較的こちらの訳語の方が使われる。まれに正則式()あるいは正規式()と呼ばれることもある。
もともと正規表現は形式言語理論において正規言語を表すための手段として導入された。形式言語理論では、形式言語が正規言語であることと正規表現によって表せることは同値である。
その後正規表現は単機能の文字列探索ツールやテキストエディタ、ワードプロセッサなどのアプリケーションで、マッチさせるべき対象を表すために使用されるようになり、表せるパターンの種類を増やすために本来の正規表現にはないさまざまな記法が新たに付け加えられた。このような拡張された正規表現には正規言語ではない文字列も表せるものも多く、ゆえに正規表現という名前は実態に即していない面もあるが、伝統的に正規表現と呼ばれ続けている。
符号点の範囲によってたとえば「アルファベット大文字」などを表現しようとすることは、時に問題をひきおこす。たとえばロケールに依存する例として、エストニア語のアルファベット順では、文字「s」の後に「z」があり、その後は「t」「u」「v」「w」「x」「y」と続くので、正規表現「[a-z]」ではすべての言語のすべてのアルファベット小文字にマッチするわけではない。そのため、POSIX 標準では次の表に示されているクラス、つまり文字の区分を定義している。
例:正規表現「[[:upper:]ab]」は英語の大文字「A」〜「Z」と「a」と「b」のうち1文字のみにマッチする。
いくつかのツールで使用できる、POSIX にないクラスとして「[:word:]」がある。「[:word:]」は通常「[:alnum:]」とアンダースコアからなる。これらが多くのプログラミング言語で識別子として使用できる文字であることを反映している。