正規表現
正規表現は文字列パターンの記述方法でパターンマッチングに使われます。
正規表現は//で挟み、下記の記号が使われます。
  | いずれかの文字列にマッチする。例:/太郎|次郎/
  ^ 文字列の先頭にマッチする。  例:/^太郎/
  $ 文字列の末尾にマッチする。  例:/太郎$/
  . ドットは改行以外の任意の1文字にマッチする。

  [ ] いずれか1文字にマッチする(文字クラス)。「-」は範囲を示す。
      [a-zA-Z0-9_] → \wに略記
      [ \r\t\n\f] → \sに略記
      [0-9]    → \dに略記(数字にマッチ)
      [^0-9]   → \Dに略記(数字以外にマッチ)

  直前の文字の頻出回数でマッチする。例:/.*/ /\d+/
    * 0回以上
    + 1回以上
    ? 0回又は1回

  下記の文字にマッチさせる場合はその直前に\を付けます。
    ^ \ [ $ * + ? . { ( ) |

正規表現の使用例
 if ($data =~ /太郎/) { }  $dataに対して「太郎」とマッチするか判定する。
 if (/太郎/) { }       $dataを指定しない場合は$_が対象になる。
 if (/ab/i) { }       i修飾子は大文字と小文字を区別しない。
 if (/(\d+)AB(\w+)/) {print $1,$2;}  (\d+)が$1、(\w+)が$2に対応する。( )の順に$1,$2,・・・

s///ige 正規表現にマッチした部分を他の文字列に置換します。下記の修飾子があります。
       i 大文字と小文字を区別しない。
       g 全てのマッチを置換する。
       e 置換文字列を式として実行する。
      例 $data =~ s/a/0/; $dataにある最初のaを0に置換する。
         s/a/0/ig;     $_にある全てのa又はAを0に置換する。
         s/(\d+):(\d+)/A=$1 B=$2/; 最初の(\d+)が$1、後の(\d+)が$2に対応する。

split  正規表現にマッチした部分で分割してリストにします。
      例 ($a,$b) = split(/&/,$data);  $dataを&で分割する。
         @a = split(/&/);       $_を&で分割して@aの配列に格納する。
         @a = split(//);        $_を1文字単位に分割して@aに格納する。
■プログラム (sample15.cgi)
$data = '名前は太郎です。';
if ($data =~ /太郎/) {print "太郎にマッチしました。<br>";} else {print "太郎にマッチしません。<br>";}
$_ = '名前は太郎です。';
if (/太郎/) {print "太郎にマッチしました。<br>";} else {print "太郎にマッチしません。<br>";}
if (/^太郎/) {print "太郎にマッチしました。<br>";} else {print "太郎にマッチしません。<br>";}

$_ = '01ABCD';
if (/ab/i) {print "マッチしました。<br>";} else {print "マッチしません。<br>";}
if (/(\d+)AB(\w+)/) {print "$1,$2<br><br>";} else {print "マッチしません。<br><br>";}

$data = 'abcabc'; $data =~ s/a/A/; print "$data<br>";
$data = 'abcabc'; $data =~ s/a/A/g; print "$data<br>";
$_ = 'abcABC'; s/a/0/ig; print "$_<br>";
$_ = '5:67'; s/(\d+):(\d+)/A=$1 B=$2/; print "$_<br>";

$data = '012&345'; ($a,$b) = split(/&/,$data); print "$a,$b<br>";
$_ = '012&345'; @a = split(/&/); print "$a[0],$a[1]<br>";
$_ = '345'; @a = split(//); print "$a[0],$a[1],$a[2]<br>";
■実行結果
太郎にマッチしました。
太郎にマッチしました。
太郎にマッチしません。
マッチしました。
01,CD

Abcabc
AbcAbc
0bc0BC
A=5 B=67
012,345
012,345
3,4,5


HOME Copyright (C) CGI-design All Rights Reserved.