技能一覧 › 大学数学 オートマトン・形式言語

正規表現が表す言語と文字列の判定

和 ・連接・クリーネ閉包 からなる正規表現 の言語 を読み取り、与えられた文字列が に属するかを判定でき、2 つの正規表現が同じ言語を表すかを判断できる

前提

中学までに習ったことだけで始められます。

説明

正規表現は、文字列の集まり(言語)を ・連接・ の 3 つの操作だけで短く書き表す方法です。この技能を身につけると、正規表現 を見てそれが表す言語 を言葉で説明できます。また、与えられた文字列が に入るかを判定でき、2 つの正規表現が同じ言語を表すかどうかも判断できます。テキスト検索のパターン、字句解析、オートマトンの設計などで使います。

なぜそうしてよいのか

文字の有限集合 (アルファベット)を決めます。 の文字を有限個(0 個でもよい)並べたものを文字列といい、長さ 0 の文字列を と書きます。文字列の集合を言語といいます。正規表現と、それが表す言語 は、小さい部品から順に次のように定めます。各文字 について 、、 です。正規表現 に対しては次のように定めます。
・和:(どちらかに合う)
・連接:(前半が 、後半が に合うように切れる)
・閉包:( に合う断片を 0 個以上つなげたもの)
演算の強さは > 連接 > の順です。たとえば は と読みます。

このように は部品の言語から組み立てられています。そのため「文字列 が に入るか」という問いは、部品についての小さな問いに分解できます。たとえば を調べるには、 を前後 2 つに切る方法(有限通り)を試し、前が 、後ろが に入る切り方があるかを見ればよいです。 なら、 を の要素の断片に区切れるかを見ます。 ならいつでも入ります。

2 つの正規表現 が同じ言語を表す()とは、集合として等しいこと、つまり と の両方が成り立つことです。等しくないことを示すには、一方にだけ入る文字列を 1 つ挙げれば十分です。等しいことを示すには、それぞれの言語を言葉で特徴づけ(例:「 からなる任意の文字列」)、両方の包含を確かめます。

手順

  1. 正規表現に括弧を補い、構造をはっきりさせる(優先順位は > 連接 > )。例:

  2. 内側の部品から順に言語を読み取り、 を言葉で特徴づける(例: は からなるすべての文字列で、 も含む)

  3. 判定する文字列 について、外側の演算に合わせて調べる。 ならどちらかに入るか、連接なら前後に切れるか、 なら の断片に区切れるかを見る

  4. 区切り方が 1 通りも見つからないときは、その理由を示す(例:「どの断片も で終わるのに、 は で終わる」)。その上で と結論する

  5. 2 つの正規表現の比較では、まず短い文字列を順に試して、一方にだけ入る反例を探す。反例があれば等しくない。見つからなければ両方の言語を言葉で特徴づけ、 と を確かめる

例題

アルファベット 上の正規表現 について、次の文字列のうち に属するものをすべて選べ。
ア: イ: ウ: エ:

例題の解答

手順 1: は 全体に がかかった形です。中の は「 または 」と読みます。
手順 2: です。したがって は、断片 と を好きな順に 0 個以上つなげた文字列全体になります( も含む)。どちらの断片も で終わり、 の直後には必ず が来ます。
手順 3(判定):
ア と区切れるので、属します。
イ :先頭の で始まる断片は しかありません。ところが 2 文字目は です。 の直後が でないので区切れず、属しません。
ウ と区切れるので、属します。
エ :どの断片も で終わるので、空でない の要素は必ず で終わります。 は で終わるので、属しません(手順 4)。
よって、属するのはアとウです。

答え:

ア, ウ

よくある誤り

この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。

入口の問題

この技能を使う問題

この技能の次に学べること