正規表現とは

せいきひょうげん

文字列のパターンを、記号を組み合わせて表す書き方。. は任意の1文字、* は直前の要素の0回以上の繰り返し、^ と $ は行の先頭と末尾、[abc] は角括弧の中のどれか1文字を表し、grep、sed、awk などのコマンドや多くのプログラミング言語で検索や置き換えに使う。grep の基本正規表現(BRE)と、+ や ? や | をそのまま使える拡張正規表現(grep -E、ERE)では、記号の扱いが一部違う。シェルのワイルドカード(*.txt など)とは別のもので、* の意味も異なる。

「正規表現」は、2分野の4問の練習問題に出てきます(コンパイラ, Linuxとコマンドラインの基礎など)。

この用語の分野: Linuxとコマンドラインの基礎

正規表現の練習問題に挑戦

コンパイラの字句解析の役割として正しいものはどれか。

  1. Aプログラムの文が、言語の文法に合っているかどうかを木の形で確かめる
  2. Bソースコードの文字の並びを、識別子や演算子などのトークンに分ける
  3. C変数の型が合っているかや、未定義の名前を使っていないかを調べる
答えと解説を見る

正解:B. ソースコードの文字の並びを、識別子や演算子などのトークンに分ける

字句解析はコンパイラの最初の段階で、例えば「count = count + 1;」を、識別子count、記号=、識別子count、記号+、数値1、記号; というトークンに分けます。空白やコメントもここで取り除かれます。トークンの規則は正規表現で書けるので、有限オートマトンで高速に処理できます。文法に合っているかを木の形で確かめるのは次の構文解析、型や名前を調べるのは意味解析の仕事です。

字句解析でトークンを見分ける規則を表すのによく使われるものはどれか。

  1. A浮動小数点の丸めの規則
  2. B正規表現と、それを処理する有限オートマトン
  3. Cキャッシュの置き換えの規則
答えと解説を見る

正解:B. 正規表現と、それを処理する有限オートマトン

識別子は「英字で始まり英数字が続く」、数値は「数字が1つ以上続く」のように、トークンの種類は正規表現で簡潔に書けます。正規表現は有限オートマトン(状態の数が有限の機械)に変換でき、文字を1つ読むごとに状態を移していくだけで、入力の長さに比例する時間でトークンを切り出せます。そのため字句解析器は、正規表現から自動で生成する道具で作られることも多くあります。丸めやキャッシュの規則は字句解析とは関係ありません。

解説の中の「正規表現」

「正規表現」が出てくる問題(4問)

  1. コンパイラの字句解析の役割として正しいものはどれか。
  2. 字句解析でトークンを見分ける規則を表すのによく使われるものはどれか。
  3. 多くのプログラミング言語の文法を表すのに使われ、構文解析の基礎になる文法の種類はどれか。
  4. 上の操作で、最後の grep が出力する行として、正しいものはどれか。

Linuxとコマンドラインの基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

関連する用語

字句解析 構文解析 grep inode SSH 環境変数 Git cron シェル シグナル(Unix)

用語集の一覧へ