A*(クリーネ閉包)も正規言語である。上の言語は正規言語ではない。難しそうですが、示している内容は極めて簡単なので見ていきましょう。1と2については無視して良いです。プログラムで言うところの停止条件に相当します。正規言語は再帰的な定義となっているのでその停止条件としてこれらがあります。5も無視して良いです。パターンにマッチしないテキストは受理しないということを言ってるに過ぎません。1文字だけでマッチするものが正規言語だ、と言っています。4は3つのことを言っています。B(和集合)も正規言語である。B(結合)も正規言語である。正規言語であるとき、A*(クリーネ閉包)も正規言語である。1は飛ばして2の結合を見ると、これは前出1段のネストの1から3が順番に評価されることを言っています。マッチするというだけのことです。除く全ての文字の和集合という解釈になります。用いて説明するほうが良いでしょう。直前の正規言語が任意回数(0回以上)マッチするということを示しています。2段のネストの2の「次のパターンを任意個含む」が相当します。これが正規言語のすべてです。拍子抜けするほど簡単だったことでしょう。逆に本来の正規表現はこれしかできません。この正規言語の定義以上のことができるように見えます。定義の拡大解釈や表記の省略によって実現されてる部分も少なく有りません。それ以外の拡張を見極めることがとても大事なのです(2回目)。Vimなどのツールで利用可能な正規表現には多くのメタ文字や記法があります。これらが定義の延長線上にあるものなのか、それ以外なのか見極めましょう(3回目)。これは明らかに正規言語の定義の外です。正規言語とはなんら関係がありません。文字と文字の間を仮想的な文字としただけの定義の拡大解釈です。分類される両者ですがその性質は大きく異なります。Vim以外にも世の中にはいろんなプログラムが正規表現を採用しています。それぞれのツールがそれぞれのニーズに従い機能の拡張や記法のバリエーションを導入しています。そのため正規表現は学習するのも活用するのも大変難しく見えてしまいます。多くの場合は途端にスッキリ整理されたかのように簡単に見えてきます。勉強すると良いでしょう。便利な思考ツールとして機能してくれることでしょう。「ヤバイ」以外の語彙を失ってしまいます。基本的にできることはたった1つで「入力を受理するか拒否するか」だけです。「入力」とは特にVimという文脈ではテキストデータに相当します。「受理するか拒否するか」はマッチするかしないかに相当します。FAの動作としては内部に状態がありテキストを一文字ずつ入力するたびにその内部状態が遷移(変化)していきます。全部の入力が終わった際に終了状態になっていれば受理、なっていなければ拒否というシンプルな挙動です。1つの初期状態と0個以上の終了状態が指定されます。この遷移の定義の方法を変えることでFAの種類がきまります。遷移の定義方法は数学モデル的には「状態遷移関数」とも言います。このFAは決定性オートマトン(DFA)になります。コンバータやコンパイラといった感じの振る舞いをするムーア・マシンとなります。バグの少ない設計手法の1つとして広く利用されています。