単一の文字や数字にマッチするもの
メタキャラクタ | 一致するもの |
. | 改行文字を除く任意の1文字 |
[a-z0-9] | []の中の任意の1文字(この場合小文字叉は数字の1文字) |
[^a-z0-9] | []の中にない任意の1文字(この場合小文字叉は数字以外の1文字) |
\d | 1つの数字 |
\D | 数字以外の1文字。[^0-9]に同じ。 |
\w | アルファベット叉は数字(word)の1文字。 |
\W | アルファベットと数字以外の1文字。 |
メタキャラクタ | 一致するもの |
\s | 空白文字(スペース、タブ、改行) |
\S | 空白以外の文字 |
\n | 改行 |
\r | リターン(復帰) |
\t | タブ |
\f | フォームフィールド |
\b | バックスペース |
\0 | ヌル文字 |
\12 | 8進数の値 |
\x811 | 16進数の値 |
\cX | 制御文字 |
\ | メタキャラクタ(特別な意味をなくす) |
メタキャラクタ | 一致するもの |
\b | 単語の区切り |
\B | 単語の区切り以外 |
^ | 行頭 |
$ | 行末 |
メタキャラクタ | 一致するもの |
x? | 0個または1個のx |
x* | 0個以上のx |
x+ | 1個以上のx |
x{m,n} | m個以上n個以下のx(「,」などの前後に空白を置かない) |
abc | abcの順にすべてマッチ |
was|were|will | was, were, willのいずれか1つ |
(文字列) | 後方参照に使う |
\1または$1 | ()で囲まれた最初の集合 |
\2または$2 | ()で囲まれた2番目の集合 ... 以下\9($9)まで |
$& | 最後のパターンマッチングでマッチした文字列 |
$` | 最後のパターンマッチングでマッチしたものに先攻する文字列 |
$' | 最後のパターンマッチングでマッチしたものに後続する文字列 |
$+ | 最後のパターンマッチングでマッチしたパターン |
正規表現は通常「/」で区切ります。
例:/abc/
パターン照合演算子
変数 =~ /文字列/ ... 変数に文字列が含まれているか
変数 !~ /文字列/ ... 変数に文字列が含まれていないか
--
例1
$mojiretsu = "Hello world";
if ($mojiretsu =~ /or/) { #もし$mojiretsuに/or/が含まれていれば
print "yes\n"; #yesと表示
} else { #含まれていなければ
print "no\n"; #noと表示
}
出力:yes
--
例2
$mojiretsu = "Error messages are more informative, and the optional warnings will catch many of the mistakes a novice might make.";
if ($mojiretsu =~ /optional/) {
print "$` $& $'\n";
} else {
print "No such strings.\n";
}
出力:Error messages are more informative, and the optional warnings will catch many of the mistakes a novice might make.--
構文:s/old/new/
働き:文字列「old」を文字列「new」に置き換える
このままだと、最初にマッチした文字列を1度置き換えるだけ。すべてを置き換えるにはgオプションを使います。また、大文字・小文字を無視する場合はiオプションを指定します。
例:
$moji1 = "Hello";
$moji3 = $moji2 = $moji1;
$moji1 =~ s/e/@/;
print $moji1,"\n"; #出力→ H@llo
$moji2 =~ s/l/L/;
print $moji2, "\n"; #出力→ HeLlo
$moji3 =~ s/l/L/g;
print $moji3, "\n"; #出力→ HeLLo
$moji2 =~ s/l/9/ig;
print $moji2,"\n"; #出力→ He99o
tr関数
構文:tr/パターン1/パターン2/
働き:パターン1の各文字をパターン2の対応する各文字に置き換える。
s演算子と根本的に違うのは、1文字単位で置き換えることです。
例:
$moji1 = "Hello";
$moji3 = $moji2 = $moji1;
$moji2 =~ tr/el/89/;
print $moji2,"\n"; #出力→ H899o
$moji3 =~ tr/A-Z/a-z/; #A-Zは、大文字のAからZまでの26文字を表す
print $moji3, "\n"; #出力→hello
$moji3 =~ tr/a-z/A-Z/;
print $moji3, "\n"; #出力→HELLO