blog20100901

2013/08/20 - プログラミング言語 Perl にまつわる etc. - Perl monger
参考 : perldoc, perldoc.jp, search.cpan.org, perldoc.perl.org ...
「 初めての Perl 第 6 版 」(オライリー・ジャパン発行 ISBN978-4-87311-567-2) 」
「 続・初めての Perl 改訂版 」(オライリー・ジャパン発行 ISBN4-87311-305-9) 」
「 Effective Perl 第 2 版 」(翔泳社発行 ISBN978-4-7981-3981-4) 」 ... etc,.

Perl Perl_0 正規表現

Perl 「 正規表現 」: メタキャラクタ (量指定子) (0x5b)

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)の記事
 Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228) (2023-10-11 23:49)
 Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227) (2023-05-26 15:41)
 Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226) (2023-05-19 17:05)
 Perl mp2 翻訳 テンプレートシステムの選択 (d225) (2022-08-15 22:23)
 Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224) (2022-06-15 20:43)
 Perl mp2 翻訳 チュートリアル (d223) (2022-06-15 20:42)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

Llama
リャマ
TI-DA
てぃーだブログ
プロフィール
セラ (perlackline)
セラ (perlackline)
QRコード
QRCODE
オーナーへメッセージ

PAGE TOP ▲