ラボ演習 regex0
これはセキュアなソフトウェア開発に関するラボ演習です。
ラボの詳細については、概要をご覧ください。
ゴール
シンプルな正規表現の書き方を学びます。
背景
正規表現(regular expressions: regexes)はテキストのパターンを表現するために広く利用されている表記方法です。
ここでは入力検証のための正規表現の使い方を見ていきます。
正規表現の表記方法は言語により若干異なりますが、大枠では共通しています。以下が正規表現を表記するための基本的なルールです。
- 最も単純なルールは、文字や数字はそれ自身にマッチするということです。つまり、"d" という正規表現は "d" という文字にマッチします。多くの実装ではデフォルトで大文字・小文字を区別してマッチし、それは通常望まれる動作です。
- もうひとつのルールは、いくつかの文字のうちどれかを指定するために角カッコで囲むというものです。もし角カッコが単なる英数字を囲っていた場合は、それらは囲まれた英数字のどれかにマッチします。つまり [brt] は単一の文字である "b", "r", "t" のどれかにマッチします。
カッコの中ではダッシュ("-")で文字の範囲を示すことができます。つまり [A-D] はその範囲の一文字、すなわち一文字の A、一文字の B、一文字の C、一文字の D のどれかにマッチします。
カッコの中には複数の範囲を書くことができます。
例えば [A-Za-z] は、大文字のアルファベット一文字または小文字のアルファベット一文字にマッチします。
(このラボでは EBCDIC のような使われなくなって久しい文字システムを使用していないと仮定しています)
- パターンに続けて "*" が書かれた場合、それは"0回以上"を意味します。
ほとんど全ての正規表現の実装では(ただし POSIX BRE を除く)、パターンに続けて "+" が書かれた場合は"1回以上"を意味します。
つまり [A-D]* は、A, B, C, D のどれかが0文字以上続く場合にマッチします。
タスクの詳細
特定のパターンを検索するためのシンプルな正規表現(regular expression: regexes)を書いてみましょう。
必要に応じて「ヒント」や「諦める」のボタンを押してください。
演習 ()
以下の要求を満たす正規表現(regex)のパターンを作成してください。
Part 1
ECMAScript (JavaScript) で使うことを想定して、"cat" という語句が文のどこにあるかに関わらず検索するための正規表現を作成してください。
Part 2
ECMAScript (JavaScript) で使うことを想定して、1つ以上の "A" と1つ以上の "B" が連続する箇所を検索するための正規表現を作成してください。
このラボは、Linux FoundationのDavid A. Wheelerによって開発されました。