SAK 図書館

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

CGI-Perl 基礎編 (その八) 正規表現、マッチパターン、置換演算子、変換演算子

■正規表現

  ・過去扱ってきた言語に正規表現などと言うものは存在しなかった。
    上手く使うと非常に便利である。(パターンマッチ、パターンマッチング)
    以下、簡単にまとめておく。

■マッチパターン演算子

  i     大文字、小文字の区別なし
  s     単一行として処理 (^、$ は、\n を無視)
  m     複数行として処理 (^、$ は、行先頭、行末尾)
  x     空白を無視、# をコメント処理

■メタ文字

  .     改行を除く任意の 1 文字
  *     0 回以上のパターン繰り返し
  +     1 回以上のパターン繰り返し
  ?     0 または 1 回のパターン
  ^     先頭から
  $     末尾から
  \     メタ文字クォート
  |     パターン論理和
  ()    パターングループ
  []    文字クラス
  {}    量指定子

  \n    改行                          文字クラスでも指定可
  \r    キャリッジリターン            文字クラスでも指定可
  \f    ラインフィード                文字クラスでも指定可
  \t    タブ                          文字クラスでも指定可
  \d    数字 [0-9]                    文字クラスでも指定可
  \D    数字以外 [^0-9]
  \w    英数字単語 [_a-zA-Z0-9]       文字クラスでも指定可
  \W    英数字単語以外 [^_a-zA-Z0-9]
  \s    空白 [ \t\n\r\f]              文字クラスでも指定可
  \S    空白以外 [^ \t\n\r\f]
  \b    単語境界 \w、\W の間          文字クラスでも指定可
  \B    単語境界以外
  \x??  16 進数

■文字クラス

  -     範囲
  ^     先頭に置くと以外にマッチ

  /[0123456789]/        数字にマッチ
  /[0-9]/               数字にマッチ
  /[^0-9]/              数字以外にマッチ
  /[a-zA-Z]/            英字にマッチ
  /[a-fA-F\d]/          16 進数にマッチ

■量指定子

  {}?   最短マッチ(? がないと最長マッチになる)

  *                     0 回以上のパターン繰り返し
  +                     1 回以上のパターン繰り返し
  ?                     0 または 1 回のパターン
  {n}?                  n 回繰り返しマッチ
  {n,}?                 n 回以上繰り返しマッチ
  {n, m}?               n 回以上、m 回以下繰り返しマッチ

■例

  /abc/                 abc にマッチ
  /a.c/                 a?c にマッチ
  /a(bb|b1|b2)c/        abbc、ab1c、ab2c にマッチ
  /^abc/                abc で始まるとマッチ
  /abc$/                abc で終わるとマッチ
  /^$/                  空行とマッチ
  /ab?c/                ac、abc にマッチ
  /a.*c/                ac、abc、ab1c などにマッチ
  /a.+c/                abc、ab1c などにマッチ
  /[0-9]{1, 2}/         0 〜 99 にマッチ
  /[a-zA-Z]{8,}/        英字 8 文字以上にマッチ
  /あいうえお{2}/       「あいうえおお」にマッチ
  /(あいうえお){2}/     「あいうえおあいうえお」にマッチ

■マッチ演算子

  m/マッチパターン/

  c     g と併せて使用し、失敗時の位置リセット禁止
  g     マッチするものすべて
  i     大文字、小文字の区別なし
  s     単一行マッチ
  m     複数行マッチ
  o     パターンコンパイル
  x     空白を無視、# をコメント処理

  $1, $2, ...  () の n 番目マッチ文字列
  $&           正規表現マッチ部分
  $`           マッチ部分の前
  $'           マッチ部分の後
  $+           最後の () にマッチした文字列

  if ($s =~ m/abc/i) { マッチ処理; }

■置換演算子

  s/マッチパターン/置換文字列/

  e     置換文字列を式とする
  g     マッチするものすべて
  i     大文字、小文字の区別なし
  s     単一行マッチ
  m     複数行マッチ
  o     パターンコンパイル
  x     空白を無視、# をコメント処理

  $s =~ s/abc/123/i;        #// abc を 123 に
  $s =~ s/</&lt;/g;     #// < を &lt; に
  $s =~ s/(.)\1/$1/g;       #// 連続文字を 1 文字に
  $s =~ s/abc//g;           #// abc を削除(指定文字を取り除く)
  $s =~ s/\@//g;            #// @ マークを削除

#// 教えてもらった凝ったやつ1 (_?_...__ にマッチ)
  $s = '_a_あい_うえお__かきくけこ_b_さしすせそ__';
  $s =~ s/_._([^_]+|([^_]+_[^_]+)+)__/start$1end/g;

startあい_うえおendかきくけこstartさしすせそend

#// 教えてもらった凝ったやつ2 (最短マッチを使う手 Perl5 以降)
  $s = '_a_あい_うえお__かきくけこ_b_さしすせそ__';
  $s =~ s/_._([\s\S]*?)__/start$1end/g;

startあい_うえおendかきくけこstartさしすせそend

■変換演算子

  tr/対象リスト/変換リスト/

  c     対象リストに含まれないものを変換
  d     変換リストに含まれないものを削除
  s     連続文字を 1 文字に変換

  $s =~ tr/A-Z/a-z/;        #// 英子文字に変換
  $s =~ tr/0-9a-zA-Z/_/c;   #// 英数字以外を _ に変換
  $s =~ tr/a-zA-Z//d;       #// 英字を削除
  $s =~ tr/a-zA-Z//cd;      #// 英字以外を削除

■grep

  @rec = grep(/abc/, @rec);
  @rec = grep(/マッチパターン/, @rec);

  @rec = grep {/abc/} @rec;
  @rec = grep {論理式} @rec;

■CGI-Perl 基礎編資料
■CGI-Perl 基礎実地編資料
■CGI-Perl 応用実地編資料
■PHP 基礎編資料
■PHP + MySQL 編資料
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索



Copyright (C) 1999-2017 Y.SAK