^ (キャレット) |
1.行頭を表す テキスト: she is beautiful. is she beautiful? regexp: /^she/ 1行目のsheのみにマッチ 2.文字クラス内で否定を表す [^a] ... 「a」以外の任意の1文字 |
$ (ドル) |
1.行末を表す テキスト: mypicture.jpg jpg-viewer regexp: /jpg$/ 1行目のjpgのみにマッチ 注.Perlでは、$はスカラー変数を表すのにも用いられます。 |
\b |
単語の境界を表す テキスト: look looked regexp: /\blook\b/ 1行目のlookのみにマッチ |
\B |
単語の境界以外を表す |
? (クエスチョンマーク) |
直前の文字の0回、または1回の繰り返し テキスト: ask asks regexp: /asks?/ 両方にマッチ |
* (アスタリスク) |
直前の文字の0回以上(0から無限大の範囲)の繰り返し テキスト: ask asks askssss regexp: /asks*/ すべてにマッチ |
+ (プラス) |
直前の文字の1回以上(1から無限大の範囲)の繰り返し テキスト: ask asks askssss regexp: /asks+/ 2番目と3番目にマッチ |
{min,max} (繰り返し数指定) |
直前の文字のmin回からmax回までの繰り返し テキスト: ask asks askssss regexp: /asks{2,4}/ 3番目にマッチ regexp: /asks{4}/ 3番目にマッチ これは、ある回数を1つだけ指定する方法です regexp: /asks{,4}/ すべてにマッチ これは、最大繰り返し数だけ指定する方法です(0回〜最大数) 注意:Perlでは、{と}の中に空白文字(スペースなど)を挿入してはいけません。 |
. (ピリオド、ドット) |
任意の一文字にマッチ 通常は、改行以外の全ての文字にマッチしますが、Perlでは改行にもマッチさせることができます。 テキスト: bananas bananas bananas regexp: /.a./ 上記のようにマッチ。通常は1度マッチすると検索が終了するので、1番目の結果だけが返されます。 |
[ ] (角括弧、ブラケット) |
[と]の中に記述された文字のうちのいずれかにマッチ テキスト: bananas bananas bananas regexp: /[a]/ 上記のようにマッチ。通常は1度マッチすると検索が終了するので、1番目の結果だけが返されます。 テキスト: bananas regexp: /b[a]/ 上記のようにマッチ。bの後にaが来るものだけ。 テキスト: bananas bananas bananas regexp: /a[a-z]/ 上記のいずれかにマッチ。通常は1度マッチすると検索が終了するので、1番目の結果だけが返されます。 「-」は、角括弧内で用いられると、範囲指定を表すメタキャラクタとして扱われます。[a-z]は、小文字のaからzまでのうちの1文字とマッチします。 テキスト: bananas bananas regexp: /a[^s]/ 上記のいずれかにマッチ。通常は1度マッチすると検索が終了するので、1番目の結果だけが返されます。 「^」は、角括弧内で用いられると、否定を表すメタキャラクタとして扱われます。[^s]は、小文字のs以外の任意の1文字とマッチします。 |
\w |
アルファベットの任意の一文字にマッチ アルファベットとは、大文字、小文字のアルファベットの他に、数字とアンダーバー(アンダースコア;_)を含みます。[a-zA-Z0-9_]に等価です。 |
\W |
アルファベット以外の任意の一文字にマッチ |
\d |
数字の任意の一文字にマッチ 0から9までの数字のいずれか一文字にマッチします。[0-9]に等価です。 |
\D |
数字以外の任意の一文字にマッチ |
\s |
任意の空白文字一文字にマッチ テキスト: He looked at the picture. Helooked closely at the picture. regexp: /looked\sat/ 1番目にマッチ |
\S |
任意の空白文字以外の一文字にマッチ |
\t |
タブ(一文字)にマッチ |
\n |
改行(一文字)にマッチ 改行は、使用システムによって実際の値が変わります。異機種間にまたがるデータ処理では注意が必要です。 UNIX...LF(/\x0A/) Mac...CR(/\x0D/) Windows...CR+LF(/\x0D\x0A/) |
\f |
フォームフィード(一文字; /\x0C/)にマッチ |
\r |
キャリッジリターン(一文字; CR; UNIX&Win.../\x0D/ Mac.../\x0A/[LF])にマッチ |
( ) 丸括弧 |
ある正規表現の有効範囲を明示的に記述します。また、Perlでは、(と)でくくられたグループを$1などの特殊な変数内に捕捉します。 テキスト: look looked looking looks regexp: /look(ed)?\b/ 上記1番目と2番目だけにマッチ |
| |
|の前後に指定された文字(列)のいずれかの文字(列) テキスト: look looked looking looks regexp: /s|p/ 4番目だけにマッチ regexp: /ke|ks/ 2番目と4番目にマッチ regexp: /look|looks|looked|looking/ すべてにマッチ。ただし、全ての場合において先頭から4文字目(look)しか捕捉されない。 regexp: /looking|looked|looks|look/ すべてにマッチ。文字長の大きいものから記述すると、全てを捕捉する。 regexp: /look(ing|ed|s)?/ すべてにマッチ。上記例よりも速い。 |
[x-y] |
[ ]内では、前後に指定された文字の範囲を表します。このようにして表された文字の集合を、文字クラスといいます。-は、これ以外はハイフンにマッチします。 regexp: /[a-z]/ ... 小文字のアルファベット /[A-Z]/ ... 大文字のアルファベット /[A-C]/ ... 大文字のアルファベットA, B, Cのいずれか /[A-Ca-c]/ ... 大文字のアルファベットA, B, Cのいずれか、または小文字のアルファベットa, b, cのいずれか /[-A-C]/ ... Perlでは、大文字のアルファベットA, B, Cのいずれか、またはハイフンにマッチ |
\a |
ビープ(BEL; /\x07/)にマッチ |
[\b] |
文字クラス内での\bは、バックスペース(/\x08/)にマッチ |
\e |
エスケープ(ESC; /\x1B/)にマッチ |
\0 |
ヌル文字にマッチ |
\cX |
任意の制御文字一文字にマッチ キーボードの「Ctrl」+「任意の一文字」に対応 |
\10 |
8進数は、\に続いて数値を記述 |
\x1A |
16進数は、\xに続いて数値を記述 |
\ |
メタキャラクタの前に\を置くことで、特殊な意味を持たせないようにします。 テキスト: \100 regexp: /\/ 何にもマッチしないし、エラーも出ない。 regexp: /\\/ 円記号(\)にマッチ テキスト: $100 regexp: /$/ 行末にマッチしているだけで、何も捕捉できない。 regexp: /\$/ ドル記号($)にマッチ テキスト: and/or regexp: /// エラー regexp: /\// スラッシュ(/)にマッチ |
(?=) 肯定先読み |
テキストの右側にある表現を先に捕捉します。その条件に合った場合のみマッチします。その値は格納されません。 テキスト: I look for him. I look at him. regexp: /look(?=\sfor)/ 1番目の「look」とマッチ |
(?!) 否定先読み |
テキストの右側にある表現を先に捕捉します。その条件に合わない場合のみマッチします。その値は格納されません。 テキスト: I look for him. I look at him. regexp: /look(?!\sfor)/ 2番目の「look」とマッチ |
(?#コメント) |
正規表現内にコメントを入れることができます。 regexp: /look(?=\sfor)/ /look(?=\sfor)(?#searching look for)/ 上記2つは同じ結果を返します。 |
(?:) |
グループ化の( )と同じですが、$1等の変数にその値を格納しません。 |
\A |
文字列の先頭を表します。通常は「^」の方を用います。 |
\G |
g修飾子と併用するときにのみ有効となります。\Gは前に正規表現のマッチが終了した位置にマッチします。 |
\L〜\E |
\Lから\Eまでの間にある文字を、小文字に変換します。 |
\l |
\lの次の文字1文字を、小文字に変換します。 |
\Q〜\E |
\Qから\Eまでの間に指定された文字は、すべて通常の文字として扱われます。メタキャラクタは、その意味を失います。 |
\U〜\E |
\Qから\Eまでの間に指定された文字は、すべて大文字に変換されます。 |
\u |
\uの次の文字1文字を、大文字に変換します。 |
\Z |
文字列の末尾を表します。通常は「$」の方を用います。 |
(?i) |
パターンマッチの修飾子iを正規表現中に埋め込みます。修飾子iは、大文字・小文字を問わずマッチさせるとき用います。 |
(?m) |
パターンマッチの修飾子mを正規表現中に埋め込みます。 |
(?s) |
パターンマッチの修飾子sを正規表現中に埋め込みます。 |
(?x) |
パターンマッチの修飾子xを正規表現中に埋め込みます。修飾子xを指定すると、空白文字が読み飛ばされるようになります。また、正規表現中に「#」で始まるコメント行を入れることもできるようになります。 |
*? |
0回以上の繰り返し。この意味では「*」と同等ですが、最短一致します。 テキスト: aaabbbcc regexp: /aaab*?/ -> aaa /aaab*/ -> aaabbb |
+? |
1回以上の繰り返し。この意味では「+」と同等ですが、最短一致します。 テキスト: aaabbbcc regexp: /aaab+?/ -> aaab /aaab+/ -> aaabbb |
?? |
0回または1回の繰り返し。この意味では「?」と同等ですが、最短一致します。 テキスト: aaabbbcc regexp: /aaab??/ -> aaa /aaab?/ -> aaab |
{n}? |
n回の繰り返し。この意味では「{n}」と同等です。最短一致しますが、通常は変わりません。 |
{min,}? |
min回以上の繰り返し。この意味では「{min,}」と同等ですが、最短一致します。 テキスト: aaabbbcc regexp: /a{1,}/ -> aaa /a{1,}?/ -> a |
{min,max}? |
min回以上max回以下の繰り返し。この意味では「{min,max}」と同等ですが、最短一致します。 テキスト: aaabbbcc regexp: /a{1,3}/ -> aaa /a{1,3}?/ -> a |
(文字列) | 後方参照に使う |
$1 | ()で囲まれた最初の集合 |
$2 | ()で囲まれた2番目の集合 ... 以下$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