正規表現


正規表現のメタキャラクタ

単一の文字や数字にマッチするもの
メタキャラクタ一致するもの
.改行文字を除く任意の1文字
[a-z0-9][]の中の任意の1文字(この場合小文字叉は数字の1文字)
[^a-z0-9][]の中にない任意の1文字(この場合小文字叉は数字以外の1文字)
\d1つの数字
\D数字以外の1文字。[^0-9]に同じ。
\wアルファベット叉は数字(word)の1文字。
\Wアルファベットと数字以外の1文字。

空白文字
メタキャラクタ一致するもの
\s空白文字(スペース、タブ、改行)
\S空白以外の文字
\n改行
\rリターン(復帰)
\tタブ
\fフォームフィールド
\bバックスペース
\0ヌル文字
\128進数の値
\x81116進数の値
\cX制御文字
\メタキャラクタ(特別な意味をなくす)

位置指定(アンカー)文字
メタキャラクタ一致するもの
\b単語の区切り
\B単語の区切り以外
^行頭
$行末

くり返しパターン
メタキャラクタ一致するもの
x?0個または1個のx
x*0個以上のx
x+1個以上のx
x{m,n}m個以上n個以下のx(「,」などの前後に空白を置かない)
abcabcの順にすべてマッチ
was|were|willwas, 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演算子

構文: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