正規表現

7-1. パターンマッチ演算子

正規表現とは、特定の文字列にマッチさせるためのパターン記述です。
Perlの場合はc言語などの他の言語に比べて非常に強力な正規表現による
パターンマッチ機能を備えており、より詳細にかつ容易に
パターンマッチを行うことができるとされている。

Perlでは、パターンマッチ演算子として、スラッシュ ( / )
で囲んだ文字列が正規表現であるとされる。

例)

構文 意味
if ( 文字列 =~ /test/) もし「文字列」の中に「test」が含まれていれば
(パターンマッチすれば真)
if ( 文字列 !~ /test/) もし「文字列」の中に「test」が含まれていなければ
(パターンマッチすれば偽)



例)
$word = 'perl';
if ($word =~ /e/) { print "Yes"; } # "perl"という文字列に"e"が含まれている場合
else { print "No"; } # 含まれていない場合

<出力結果>
Yes

マッチした文字列は特殊変数 $& に入る。
また、マッチした文字列の前にあるすべての文字列が $` に入り、
マッチした文字列の後にあるすべての文字列が $' に入る。

また、制御構造に正規表現を当てはめることも出来る。
(この場合、対象となる「文字列」は特殊変数 $_ が充てられる)

構文 意味
if (/test/) もし変数 $_ の中に「test」が含まれていれば(パターンマッチすれば真)



例)
$_ = 'perl';
if (/e/) { print "Yes"; }# "perl"という文字列に"e"が含まれている場合
else { print "No"; } # 含まれていない場合

<出力結果>
Yes


7-2. メタ文字

   \    ^    .    $    *    ?    |    (    )    [    ]    {    }   



上記の文字を単なる文字として扱う場合には、文字の前にエスケープ文字
” \ ”をつけてエスケープシーケンスにする必要がある。


7-3. いろいろな正規表現

パターンマッチのために使える多くの正規表現文字を以下に記す。

表現 正規表現上の意味
\w 英字、数字、アンダースコア にマッチ
\W 英字、数字、アンダースコア以外の文字にマッチ
\d 数字。[0-9] にマッチ
\D 数字以外の文字。[^0-9] にマッチ
\t タブ にマッチ
\r リターンにマッチ
\n 改行 にマッチ
\f 改ページ文字にマッチ
\s スペースの1文字にマッチ
\S スペース以外の1文字 にマッチ
\a アラーム(コンピュータが出す警告音)を表す文字にマッチ
\e エスケープ文字にマッチ



7-4. 置換演算子

正規表現を使用し、マッチした文字列を置き換える置換演算子がある。

構文 意味
s/パターン/置換文字列/ 「パターン」にマッチする文字列を「置換文字列」に置き換える



例)
$name = "I am nlp user.";
$name =~ s/nlp/perl/;
print $name;

<出力結果>
I am perl user.


置換演算子は省略形として、左辺を省略することも可能であり、
この場合、左辺は 特殊変数 $_ があてられる。

例)
$_ = "I am nlp user.";
s/nlp/perl/;
print $_;

<出力結果>
I am perl user.


7-5. 正規表現を利用する関数

正規表現を利用する関数として、split関数 と join関数 というものがある。

  • split関数

    split /パターン/, 文字列, 最大分割数 「文字列」を「パターン」でマッチするものに「最大分割数」まで分割
    split /パターン/, 文字列 「最大分割数」省略時は、末尾の空フィードは切り捨て
    split /パターン/ 「文字列」省略時は、変数 $_ があてられる
    split 「パターン」省略時は、先頭の空白文字を飛ばした後、
    空白文字をパターンとする



    例)
    $prog = "c:perl:java";
    @prog = split(/:/, $prog);

    print "@prog";

    <出力結果>
    c perl prog


  • join関数

    join 区切文字, 配列 区切り文字として間に「区切文字」をはさみ込み、「配列」内の各文字列を連結する



    例)
    @prog = ("c", "perl", "java");
    $prog = join ":", @prog;

    print $prog;

    <出力結果>
    c:perl:java



    BACK TO TOP