IT備忘録

LINUX関連 .NET関連 DB関連 正規表現 その他 情報

数字1文字とマッチ
/[0-9]/

大文字・小文字を含めた英字1文字とマッチ
/[a-zA-Z]/

1、2、3のいずれでもない文字で始まるパターンを検索
/[^123]/

0から9までの数字1文字で始まり、次に1文字の「.」が続いてもよいパターンを検索
/[0-9]\.?/


■後方参照
カッコは、文字や正規表現をグループにまとめる。
グループにマッチした文字列は記録され、特別な変数によって参照できる。
参照の仕方は、カッコで囲んだグループの左から順に、\1、 \2、\3... 。
Attension!のようなHTMLタグにマッチさせるには次のように
m|<(.*?)>.*?|

正規表現の外部では、特殊変数を使って $1、 $2、$3... で参照できる。

■マッチ変数
後方参照の変数には上記のほかに、マッチ変数 $& $` $' $+ があるが、
これらの変数を使うとプログラム内のすべての正規表現の処理が遅くなる。

$& 文字列の中でパターン全体がマッチした部分を参照
$` 文字列の中でマッチに先行する部分を参照
$' 文字列の中でマッチに続く部分を参照
$+ 最後にマッチした文字列を返す

(例)最後にマッチしたワードを配列に格納
  while ( /\w+/g ){ push( @words, $& ) }

■量指定子
x? 0個または1個の x にマッチ
x* 0個以上の x にマッチ
x+ 1個以上の x にマッチ
x{m,n} m 個以上、n 個以下の x にマッチ

次のように使う。

{m} m 回の繰り返しにマッチ
{m,} m 回以上の繰り返しにマッチ
{m,n} m 回以上、n 回以下の繰り返しにマッチ

量指定子は可能な限り長いマッチを行う
$str = "care for me, care for me";
$str =~ /care.*me/;
「.*」にマッチするのは「 for 」ではなく、「 for me, care for 」までがマッチ。

可能な限り短いマッチを行いたい場合は、量指定子と組み合わせて、
最短マッチのメタ文字を使うことができる。
使い方は、量指定子の後にクエスチョン( ? )を追加する。

 *?
 +?
 ??
 {n}?
 {n,}?
 {n,m}?

■パターン検索
/A?/ # 0個、または1個以上の A にマッチ
/A*/ # 0個以上の A にマッチ
/A+/ # 1個以上の A にマッチ
/.?/ # 0個、または1個以上の任意の文字にマッチ
/.*/ # 0個以上の任意の文字にマッチ
/.+/ # 1個以上の任意の文字にマッチ
/A{1,3}/ # 1回以上3回以下のAにマッチ
/A{3}/ # 3回繰り返しのAにマッチ
/A{3,}/ # 3回以上繰り返しのAにマッチ

■アンカー
^ 行頭
$ 行末
改行の直前と文字列の末尾にマッチ
\A 文字列の先頭
複数の行がある文字列を対象に正規表現を行った場合、^ は改行の直後にもマッチするが、\A は文字列の先頭にしかマッチしない。
\b ワードの区切り(※ワードとは、英数字とアンダースコア)
\B ワードの区切り以外
\G 文字列の先頭、もしくは修飾子 g がついたパターンマッチングが終了した場所を記憶しておき、そこにマッチ
\Z 文字列の最後
$ は改行の直前にもマッチするが、\Z は文字列の最後にしかマッチしない。

■エスケープシーケンス
\a アラーム
\c 制御文字
\e エスケープ文字
\f 改ページ (form feed)
ASCII での \x0c
\n 改行 (newline)
ASCII での \x0x
\r 復帰文字 (return)
ASCII での \x0d
\t タブ (tab)
ASCII での \x09
\0 ヌル文字
\12 8進数の ASCII 値にマッチ
\x811 16進数の ASCII 値にマッチ
\t タブ

■テキスト修飾子
\E 大文字、小文字変換の終了
\l 次の文字を小文字に変換
\L \E までを小文字に変換
\Q \E までのパターン指定メタ文字の意味を打ち消す
\u 次の文字を大文字に変換
\U \E までを大文字に変換


■パターンマッチ演算子
m// 演算子

オプション
g 繰り返してマッチ
i 英字の大文字、小文字を区別しない
m 文字列を複数行として扱う
o PATTERNの評価を 1回だけにする
s ワイルドカードのドット( . )が改行にもマッチするようにする
x 拡張正規表現を使用する

■置換演算子
s/// 演算子

オプション
e 式の右側の評価を行なう
ee 式の右側の評価を行い、実行後の戻り値を再度評価する
g 繰り返し置換
i 大文字、小文字を区別しないで検索
m 文字列を複数行として扱う
o パターンの評価を 1 度だけにする
s ワイルドカードのドット( . )が改行にもマッチするようにする
x 拡張正規表現を使用する

tr/// 演算子

オプション
c 検索リストに指定された文字以外を検索
d 置換されなかった文字を削除
s 置換後の文字が重複している場合は削除して1つにつめる


■拡張構文
(?# コメント)
  正規表現内にコメントを入れる
  シャープ(#)以降の文字列はコメントとして解釈され、マッチングの対象から外れる。
(?:...)
  ( ... ) と同様にグループ化す。ただし、後方参照用の記録はない。
  メモリを使わないので多少の高速化が図れる。
(?=式)
  前方一致検索。
  たとえば、 /\w+(?=\t)/ は、単語に続いてタブがあるものにマッチしするが、$& にはタブは含まれない。
(?!式)
  後続の文字列が式に一致しなければマッチ。
  たとえば、/\w(?!\t)/ は、単語の後ろにタブがないものにマッチ。
(?ismx)
  正規表現内にパターンマッチ修飾子を埋める。
  部分的に「大文字小文字の区別を行う」などの指定に役立つ。
  部分的にパターンマッチ就職子の効果を与えたいとき、その部分の前に指定。
  たとえば、 /O(?i)ne/ は、One 、ONE など、O に続く文字 er の大文字小文字を区別しない。
  (?i)修飾子の働きをオフにしたい場合は (?i‐...) のように、‐ "ダッシュ"記号をつける。
(?<=式)
  後方一致検索
  先行する文字列が式に一致すればマッチする。
  (?   先行する文字列が式に一致しなければマッチします。



 リンク

サンプル
[IT備忘録]のサイト内にある文章の正確性については一切責任を持ちません。
実開発の際には、技術的内容は十分確認した上で作業してください。

(C) 2010 IT備忘録 All rights reserved.