| ^ (キャレット) |
|
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