Perl Perl_0 正規表現
Perl 「 正規表現 」: メタキャラクタ (量指定子) (0x5b)
目次 - Perl Index
Theme
Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0x5b 回。
Perl の「 正規表現 」( Regular expression ) の基本的なメタキャラクタの量指定子について。
代表的なメタキャラクタ
「 Perl 「 正規表現 」: 演算子とメタキャラクタ (0x58) 」で確認した代表的なメタキャラクタ ( メタ文字 ) を再度確認します。
ここでは、「 * 」( asterisk ) と「 ? 」 ( question mark ) を追加しました。
メタキャラクタ | 機能 | |
---|---|---|
\ | backslash: 直右のメタ文字をエスケープ | |
. | period: (改行以外の) 任意の 1 文字にマッチング | |
* | asterisk: 直左の文字の 0 回以上の繰り返しにマッチング | |
+ | plus sign: 直左の文字の 1 回以上の繰り返しにマッチング | |
? | question mark: 直左と同文字または、空文字にマッチング | |
^ | caret: 行頭にマッチング | |
$ | dollar sign: 行末にマッチング | |
| | pipe: 代替 ((a|b) a または b) | |
( ) | parenthesis: グループ化 | |
[ ] | bracket: 文字クラス |
この内、「 \ 」( backslash ) については、「 Perl 「 正規表現 」: バックスラッシュ (0x59) 」で確認したので、今回はそれ以外の中から「 量指定子 」を確認します。
「 量指定子 」quantifier
「 量指定子 」とは、直左の要素 ( 文字、グループやクラス等 ) に対して、その出現回数を指定する演算子です。
「 . 」period
メタキャラクタ「 . 」は、「 ピリオド 」や「 ドット 」と呼ばれます。 これは量指定子ではありませんが、量指定子と併せて利用されることがよくあります。
「 . 」は「 ワイルドカード 」とも呼ばれます。
「 ワイルドカード 」とは、カードゲームに由来する用語で、他のカードの代用が可能な特殊なカードを意味します。
正規表現のワイルドカード文字は、つまり、他の文字になり代わることが出来ます。
メタキャラクタ「 . 」は、改行文字 ( Unix システムでは \n ) 以外のすべての文字になり代わる事が出来ます。
つまり、パターン「 ad.pt 」の場合は、文字列「 adapt 」にも「 adopt 」にもマッチングします。 もちろん、「 ad5pt 」でも「 ad#pt 」でも、空白が入った「 ad pt 」でもマッチングします。
「 . 」は、改行文字を除くどの様な文字にでもなり代わることが出来るということです。
しかし、パターン「 adpt 」や、「 adaapt 」にはマッチしません。
なぜならば、「 . 」は 「 1 文字 」のみを対象としているからです。
文字列中の「 . 」にマッチングさせたい場合は、「 \. 」としてその効果を打ち消します。
「 * 」asterisk
メタキャラクタ「 * 」は、一般的には「 アスタリスク 」と呼ばれますが、正規表現の用語では「 クリーネスター 」( Kleene star ) と呼ばれます。
「 クリーネスター 」とは、「 クリーネ閉包 」という用語に由来するものです。
「 * 」は、直左の要素の 「 0 回以上 」の繰り返しにマッチングします。これもワイルドカードです。
「 . 」を利用した「 ad.pt 」では、「 adpt 」や「 adaapt 」にはマッチしませんが、「 ad*pt 」とした場合はマッチングします。
0 回以上の繰り返しによって「 apt 」にもマッチングします。
しかし、「 ad pt 」にはマッチングしません。この場合は「 . 」を使って「 .* 」とします。
「 + 」plus sign
「 + 」は「 プラス 」記号です。
「 + 」は、直左の要素の 1 回以上の繰り返しを表します。
「 ad+pt 」とした場合は、「 addpt 」や「 adddddddpt 」にマッチしますが、「 apt 」にはマッチしません。
なぜなら、「 d 」が 1 度も出現しないからです。
「 ? 」question mark
「 ? 」記号は、要素の 0 - 1 回までの出現にマッチングします。
「 ad?pt 」とした場合、「 adpt 」か「 apt 」にマッチングしますが、「 addpt 」や「 adddpt 」にはマッチしません。
0x5b -> 0x5c へ
量指定子のマッチングの量には、強欲 ( Greed ) な最長マッチングという性質や、それを制御する機能が備わっていたりします。そのさじ加減は、慣れていない内は特に、戸惑うことが多くあります。
僕はまだ馴染みが薄いので、まだまだとまどうことが多くあります。
けれども、あれだけチンプンカンプンだった記号の羅列が、わずかながらでも「 読める 」様になってくると、思わず「 ふふふ 」となります。
参考情報は書籍「 初めての Perl 第 6 版 」を中心に perldoc, Wikipedia および各 Web サイト。それと詳しい先輩。
目次 - Perl Index
Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)