perlreref - Perl の正規表現のリファレンス
本ドキュメントは、Perl の正規表現のクイックリファレンスです。 完全な情報は、perlre と perlop、また、本ドキュメントの "SEE ALSO" セクションを参照してください。
(演算子)
=~
は正規表現が適用される変数を決定します。 省略された場合には、$_ が使われます。
$var =~ /foo/;
!~
は正規表現が適用される変数を決定し、マッチの結果を反転します; マッチが成功すれば偽を返し、失敗すれば真を返します。
$var !~ /foo/;
m/pattern/msixpogcdualn
パターンマッチのために文字列を検索し、 与えられたオプションを適用します。
m 複数行モード - ^ と $ が内部的な行にマッチします
s 単行としてマッチ - . が \n にマッチします
i 大小文字の違いを無視します
x 読みやすさの拡張 - 空白やコメントを自由に置けます
p マッチした文字列のコピーを保存する -
${^PREMATCH}, ${^MATCH}, ${^POSTMATCH} が定義されます。
o パターンを一度だけコンパイルします
g グローバル - マッチするものすべて
c /g を使っているときにマッチに失敗しても pos をリセットしません
a \d, \s, \w, [:posix:] で ASCII のみにマッチングするように制限
aa (二つの a) また /i のマッチングは ASCII/非-ASCII を除外
l 現在のロケールに従ってマッチング
u Unicode のルールに従ってマッチング
d Unicode を示すものがない限りネイティブなルールに従ってマッチング
n 非捕捉モード。() で $1, $2 などを埋めない
'pattern' が空文字列なら、最後にマッチングに 成功した 正規表現が使われます。 この演算子とそれに続くものの両方で、'/' 以外のデリミタも使えます。 デリミタが '/' の場合は m
は省略できます。
qr/pattern/msixpodualn
は、正規表現を変数に入れるか、順に回せるように します。 m//
と同じ修飾子が使えて、正規表現に保管されます。
s/pattern/replacement/msixpogcedual
は、'pattern' でマッチしたものを 'replacement' で置き換えます。 m//
と同じ修飾子が使えて、さらに二つ追加されます:
e 'replacement' を式として評価します
r 置換した結果を返し、元の文字列は変更しません。
'e' は複数回指定できます。 'replacement' は、デリミタとしてシングルクォート ('
) が使われた場合を 除いて、ダブルクォートされた文字列として解釈されます。
m?pattern?
は m/pattern/
に似ていますが、一度だけマッチします。 デリミタは変更できません。 reset() でリセットしなければなりません。
\ 直後の文字をエスケープします
. 改行を除く任意の一文字にマッチします (/s が使われていない場合)
^ 文字列(/m が使われている場合は行)の先頭にマッチします
$ 文字列(/m が使われている場合は行)の末尾にマッチします
* 先行する要素のゼロ回以上の繰り返しにマッチします
+ 先行する要素の一回以上の繰り返しにマッチします
? 先行する要素のゼロ回または一回の出現にマッチします
{...} 先行する要素の繰り返しの範囲を指定します
[...] ブラケットの内側にある文字のいずれかにマッチします
(...) $1, $2... のために部分正規表現をグループ化して捕捉します
(?:...) 部分正規表現を捕捉することなくグループ化します (クラスター)
| 左右いずれかにある部分正規表現にマッチします
\g1 or \g{1}, \g2 ... N 番目のグループのテキストにマッチします
\1, \2, \3 ... N 番目のグループのテキストにマッチします
\g-1 or \g{-1}, \g-2 ... N 個前のグループのテキストにマッチします
\g{name} 名前つき後方参照
\k<name> 名前つき後方参照
\k'name' 名前つき後方参照
(?P=name) 名前つき後方参照 (python の文法)
(エスケープシーケンス)
これらは通常の文字列として働きます。
\a アラーム (ビープ)
\e エスケープ
\f 改ページ
\n 改行
\r キャリッジリターン
\t タブ
\037 番号が 3 桁の 8 進数である文字、最大 \777
\o{2307} 番号が 8 進数である文字、無制限
\x7f 番号が 2 桁の 16 進数である文字、最大 \xFF
\x{263a} 番号が 16 進数である文字、無制限
\cx Control-x
\N{name} 名前つき Unicode 文字または文字並び
\N{U+263D} 16 進数による Unicode 文字
\l 次の文字を小文字にします
\u 次の文字をタイトル文字にします
\L \E まで小文字にします
\U \E まで大文字にします
\F \E まで畳み込み文字にします
\Q \E までパターンのメタ文字を無効にします
\E 修正を終了します
タイトル文字にについては "Titlecase" を参照してください。
この 1 つは通常の文字列とは異なった働きをします:
\b 文字クラスの中以外では、表明であってバックスペースではありません
(文字クラス)
[amy] 'a', 'm', 'y' のいずれかにマッチ
[f-j] ダッシュは「範囲」を指定します
[f-j-] エスケープされるか、最初か最後にあるダッシュは「ダッシュ」を意味します
[^f-j] キャレットは「これら以外にマッチ」を示します
(\N
以外の)以下のシーケンスは文字クラス内でもそれ以外でも動作します。 最初の 6 つはロケールの影響を受け、全ては Unicode の影響を受けます。 詳細については perllocale と perlunicode を参照してください。
\d 数値
\D 非数値
\w 単語文字
\W 非単語文字
\s 空白文字
\S 非空白文字
\h 水平空白文字
\H 非水平空白文字
\N 非改行 ('{NAME}' に引き続いていない場合;; 文字クラスでは
不正; [^\n] と等価; /s なしの場合の '.' と同様)
\v 垂直空白文字
\V 非垂直空白文字
\R 一般的な改行 (?>\v|\x0D\x0A)
\pP P の名前の (Unicode) プロパティ
\p{...} 1 文字より長い名前の Unicode プロパティにマッチする
\PP 非 P にマッチする
\P{...} 1 文字より長い名前の Unicode プロパティがないものにマッチする
\X Unicode の拡張書記素クラスタにマッチする
POSIX 文字クラスと、それに対する Unicode と Perl の相当物は:
ASCII- Full-
POSIX range range backslash
[[:...:]] \p{...} \p{...} sequence Description
-----------------------------------------------------------------------
alnum PosixAlnum XPosixAlnum 'alpha' と 'digit'
alpha PosixAlpha XPosixAlpha 英字
ascii ASCII 任意の ASCII 文字
blank PosixBlank XPosixBlank \h 水平空白;
全種類は \p{HorizSpace}
とも (GNU 拡張)
cntrl PosixCntrl XPosixCntrl 制御文字
digit PosixDigit XPosixDigit \d 数字
graph PosixGraph XPosixGraph 'alnum' と 'punct'
lower PosixLower XPosixLower 小文字
print PosixPrint XPosixPrint 'graph' と 'space', しかし
Control は含まない
punct PosixPunct XPosixPunct ASCII の範囲の句読点と
シンボル; 単にその外側の
punct
space PosixSpace XPosixSpace \s 空白文字
upper PosixUpper XPosixUpper 大文字
word PosixWord XPosixWord \w 'alnum' + Unicode マーク +
'_' のような接続文字
(Perl 拡張)
xdigit ASCII_Hex_Digit XPosixDigit 16 進数;
ASCII の範囲では
[0-9A-Fa-f]
また、\p{XPosixAlpha}
のための \p{Alpha}
のような、さまざまな 同義語があります; 全ての一覧は "Properties accessible through \p{} and \P{}" in perluniprops にあります。
文字クラスの中では:
POSIX traditional Unicode
[:digit:] \d \p{Digit}
[:^digit:] \D \P{Digit}
(アンカー)
すべてゼロ幅の表明です。
^ 文字列(/m が指定されている場合には行)の先頭にマッチします
$ 文字列(/m が指定されている場合には行)の終端もしくは改行の前にマッチします
\b{} 中かっこ内で指定された境界にマッチングする
\B{} \b{} でマッチングしないものにマッチングする
\b 単語境界(\w と ¥W の間)にマッチします
\B 単語境界以外(\w と \w の間か \W と \W の間)にマッチします
\A 文字列の先頭(/m には影響されません)にマッチします
\Z 文字列の末尾(省略可能な改行の前)にマッチします
\z 文字列の本当の末尾にマッチします
\G 前回の m//g のマッチした場所の末尾にマッチします
\K \K の左側の内容を維持する、$& には含まない
(量指定子)
量指定子はデフォルトでは貪欲で、 一番左から 一番長く マッチします。
最大 最小 絶対最大 範囲
------- ------- ---------- -------------
{n,m} {n,m}? {n,m}+ 最低 n 回、m 回以内出現
{n,} {n,}? {n,}+ 最低 n 回出現
{,n} {,n}? {,n}+ 最大 n 回出現
{n} {n}? {n}+ 正確に n 回出現
* *? *+ 0 回以上 ({0,} と同じ)
+ +? ++ 1 回以上 ({1,} と同じ)
? ?? ?+ 0 回または 1 回 ({0,1} と同じ)
(Perl 5.10 で導入された) 絶対最大形式はバックトラックを抑制します: 絶対最大量指定子が付いたパターンでマッチした場合、バックトラックはしません; たとえこれによってマッチ全体が失敗することになってもです。
(拡張構造)
(?#text) コメント
(?:...) 部分正規表現を捕捉することなくグループ化します (クラスター)
(?pimxs-imsx:...) オプションを有効/無効にする (m// 修飾子のものと同じ)
(?=...) ゼロ幅の肯定先読み表明
(*pla:...) 同じ; 5.32 から; 5.28 から実験的
(*positive_lookahead:...) 同じ; *pla と同じバージョン
(?!...) ゼロ幅の否定先読み表明
(*nla:...) 同じ; 5.32 から; 5.28 から実験的
(*negative_lookahead:...) 同じ; *nla と同じバージョン
(?<=...) ゼロ幅の肯定後読み表明
(*plb:...) 同じ; 5.32 から; 5.28 から実験的
(*positive_lookbehind:...) 同じ; *plb と同じバージョン
(?<!...) ゼロ幅の否定後読み表明
(*nlb:...) 同じ; 5.32 から; 5.28 から実験的
(*negative_lookbehind:...) 同じ; *nlb と同じバージョン
(?>...) 出来うる限りマッチし、バックトラックしない
(*atomic:...) 同じ; 5.32 から; 5.28 から実験的
(?|...) 分岐のリセット
(?<name>...) 名前付き捕捉
(?'name'...) 名前付き捕捉
(?P<name>...) 名前付き捕捉 (python 文法)
(?[...]) 拡張大かっこ文字クラス
(?{ code }) 埋め込みコード; 戻り値は $^R に格納されます
(??{ code }) 動的正規表現; 戻り値は正規表現として扱われます
(?N) サブパターン番号 N に再帰する
(?-N), (?+N) N 個前/後のサブパターンに再帰する
(?R), (?0) パターン全体の先頭に再帰する
(?&name) 名前付きサブパターンに再帰する
(?P>name) 名前付きサブパターンに再帰する (python 文法)
(?(cond)yes|no)
(?(cond)yes) 条件式; "(cond)" で指定できるのは:
(?=pat) 前方参照; (*pla:pat) も
(*positive_lookahead:pat)
(?!pat) 前方参照の否定; (*nla:pat) も
(*negative_lookahead:pat)
(?<=pat) 後方参照; (*plb:pat) も
(*lookbehind:pat)
(?<!pat) 後方参照の否定; (*nlb:pat) も
(*negative_lookbehind:pat)
(N) サブパターン N が何かにマッチした
(<name>) 名前付きサブルーチンが何かにマッチした
('name') 名前付きサブルーチンが何かにマッチした
(?{code}) コード条件
(R) 再帰したら真
(RN) N 番目のサブパターンに再帰したら真
(R&name) 名前付きサブパターンに再帰したら真
(DEFINE) 常に偽; パターンなしは許されない
(変数)
$_ 演算子が使用するデフォルトの変数
$` マッチした文字列に先行する部分
$& マッチした文字列全体
$' マッチした文字列に後続する部分
${^PREMATCH} マッチした文字列に先行する部分
${^MATCH} マッチした文字列全体
${^POSTMATCH} マッチした文字列に後続する部分
まだ Perl 5.18 以前を使っている場合の注意: $`
, $&
, $'
のいずれかを使うと、プログラム中の 全ての 正規表現の 速度が低下します。 速度低下を引き起こさない、等価な表現のためには、perlvar の @-
を 調べてみてください。 また、Devel::SawAmpersand も参照してください。 Perl 5.10 から、等価な変数である ${^PREMATCH}
, ${^MATCH}
, ${^POSTMATCH}
も使えますが、これらが定義されるには、正規表現に /p
(保存(preserve)) 修飾子をつける必要があります。 Perl 5.20 では、$`
, $&
, $'
を使っても速度の違いはありません。
$1, $2 ... X 番目の捕捉された式を保持します
$+ 最後にかっこで囲まれたパターンマッチ
$^N 最も近くに閉じた捕捉を保持します
$^R 最後の (?{...}) 式の結果を保持します
@- グループの先頭からのオフセット。 $-[0] はマッチ全体の先頭です
@+ グループの末尾からのオフセット。 $+[0] はマッチ全体の末尾です
%+ 名前付き捕捉グループ
%- 配列リファレンスとしての名前付き捕捉グループ
捕捉したグループは 開き かっこの順番で番号付けされます。
(関数)
lc 文字列を小文字にします
lcfirst 文字列の最初の文字を小文字にします
uc 文字列を大文字にします
ucfirst 文字列の最初の文字を Titlecase にします
fc 文字列を畳み込み文字にします
pos カレントのマッチ位置を返したり設定したりします
quotemeta メタ文字をクォートします
reset m?pattern? の状態をリセットします
study マッチングの最適化のために文字列を調べます
split 文字列を分割するために正規表現を使います
これらの最初の五つは、エスケープシーケンス \L
, \l
, \U
, \u
, \F
と似ています。 タイトル文字については、"Titlecase" を参照してください; 畳み込み文字については、"Foldcase" を参照してください。
(用語)
(タイトル文字)
Unicode の概念で、ほとんどの場合は大文字と同じですが、ドイツ語の "sharp s" のような特定の文字については異なります。
(畳み込み文字)
大文字小文字に関わらず文字列を比較するときに有用な Unicode の形式です; ある種の文字は複雑な 1 対多大文字小文字マッピングを持つからです。 主に小文字の変種です。
Iain Truskett. Updated by the Perl 5 Porters.
This document may be distributed under the same terms as Perl itself.
-
正規表現のチュートリアルである perlretut。
-
手っ取り早いチュートリアルである perlrequick。
-
さらなる詳細である perlre。
-
変数に関する詳細である perlvar。
-
演算子の詳細である perlop。
-
関数の詳細である perlfunc。
-
正規表現に関する FAQ である perlfaq6。
-
バックスラッシュシーケンス の参考資料である perlrebackslash。
-
文字クラスの参考資料である perlrecharclass。
-
振る舞いの変更とデバッグの補助のための re モジュール。
-
正規表現や国際化に関する詳細である perluniintro, perlunicode, charnames, perllocale。
-
この話題に関する完全な背景と参考資料である Jeffrey Friedl による書籍 Mastering Regular Expressions (http://oreilly.com/catalog/9780596528126/) (O'Reillyから出版: ISBN 1556592-257-3) (日本語版は「詳説 正規表現」ISBN4-87311-130-7 (第二版のもの))。
David P.C. Wollmann, Richard Soderberg, Sean M. Burke, Tom Christiansen, Jim Cromie, and Jeffrey Goff for useful advice.