トップページに戻る    次の正規表現パズルへ    前の正規表現パズルへ

8-1 Perlの正規表現の使用例

正規表現パズル

Perlの、HelloWorldから正規表現を使用するまでの
Perlのサンプルプログラムです。

すぐわかるPerlでPerlを学びました。

#Perlでは制御構造において中括弧は必ず必要
#C言語のように単文の場合の中括弧の省略は不可


#HelloWorld (Perl環境を覚える)

print ("HelloWorld\n");
print ("HelloPerl\n");


#1から100までの和を求める (forを覚える)

for ($sum=0,$i=1; $i <= 100; $i++){
    $sum+= $i;
}
print ("sum from 1 to 100 = $sum");


#1から100までの和を求める (whileを覚える)

$sum=0;$i=1;
while ($i <= 100){
$sum+= $i++;
}
print ("sum from 1 to 100 = $sum");


#FizzBuzz問題 (ifを覚える)

for ($i=1; $i <= 100; $i++) {
    if (($i%3 == 0) and ($i%5 == 0)){
        print ("FizzBuzz\n");
    }
    elsif ($i%3 == 0){
        print ("Fizz\n");
    }
    elsif ($i%5 == 0){
        print ("Buzz\n");
    }
    else{
        print ("$i\n");
    }
}


#1から100までを配列にセット (配列の扱いを覚える)

@hairetu = ();
for ($i=1; $i <= 100; $i++){
    push(@hairetu,$i);
}

for ($i=0; $i <= @hairetu-1; $i++) {
    print ("$hairetu[$i]\n");
}


#正規表現で^[ac][1-8]な文字列を検索 (正規表現の扱い方を覚える)

$ConstRegex = '^[ac][1-8]';
@hairetu = ();
push(@hairetu,'a15');
push(@hairetu,'a81');
push(@hairetu,'a92');
push(@hairetu,'b13');
push(@hairetu,'b84');
push(@hairetu,'b96');
push(@hairetu,'c17');
push(@hairetu,'c88');
push(@hairetu,'c99');

#正規表現にマッチした文字列全体は  $&  で取れる。
#文字列をつなぐには、 A.B.C で ABCとなる。複合代入演算の .=も使える。

print ("Pattern $ConstRegex\n");
for ($i=0; $i <= @hairetu-1; $i++) {
    $LineNo = $i+1;
    $willOut = "Line$LineNo $hairetu[$i] ";
    if ($hairetu[$i] =~ m/$ConstRegex/){
        $willOut .= "matchs $&";
    }
    else{
        $willOut .= 'no match'
    }
    print "$willOut\n";
}

#実行結果
Pattern ^[ac][1-8]
Line1 a15 matchs a1
Line2 a81 matchs a8
Line3 a92 no match
Line4 b13 no match
Line5 b84 no match
Line6 b96 no match
Line7 c17 matchs c1
Line8 c88 matchs c8
Line9 c99 no match