■正規表現
●過去扱ってきた言語に正規表現などと言うものは存在しなかった。上手く使うと非常に便利である。(パターンマッチ、パターンマッチング
)以下、簡単にまとめておく。
■マッチパターン演算子
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] 文字クラスでも指定可v
\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;