やす流 Top


正規表現


これを知っているとかなり仕事がはかどる。
正規表現」、さまざまな文字列を汎用的な表現。 例えば、「N1」と「V1」の文字を表現しようとした時、”[NV]1”とか”N1|V1”とかで表現できる。。。
サーバ管理などで多量なログファイル群から、あるキーワードを検索する時などに、効率良く、 正確に調べることができる。。。使いこなせれば、間違いなく、 勝者になれる!

サクラエディタ(Perl5)を使うことが多いので、特化した情報をまとめてみたい。
なお、△は半角スペースを意味する。

【基本正規表現】

メタ 意味 使用例 説明
  メタ以外の文字 yasryu そのまま表現される文字
\ 次の文字がメタ文字でないことを示す \\ 「\」を表現
任意の1文字にマッチ(改行\n,\r、NULを除く) y.u yから始まってuで終わる3文字の文字列
[ ] 指定された文字の中のいずれかにマッチ
キャラクタクラス指定。1文字を指定する
[13579] 1桁の奇数
[3-7] 3から7までの数字
[0-9A-F]{2} 0-9とA-Fのいずれかの2文字(2桁の16進数)
[^a-d] abcd以外の1文字
[0-9] 全角数字
[A-Z]+ 全角英大文字列
[ぁ-ん] ひらがな
[ァ-ヴ]  又は[ァ-ヶ] 全角カタカナ
[ヲ-゚] 半角カタカナ
[一二三四五六七八九十壱弐参拾百千万萬億兆〇]+ 漢数字列
[ -~] 任意の1バイト文字(半角空白" "から"~"まで)にマッチ 
[亜-黑] 漢字にマッチ
( ) グルーピング指定 (ab) ab ababab にマッチ。
直前の文字の0個以上の繰り返しにマッチ
最長一致(複数のヒットパターンのうち、最長を採用)
y.*u yから始まってuで終わる3文字以上の文字列
{} 量指定子 {10} 直前のパターンが10回連続
{3,} 直前のパターンが3回以上連続
{,12} 直前のパターンが12回以下連続
{4,9} 直前のパターンが4から9回連続
$  (パターンの末尾にある時のみ)行末にマッチ  。$ 行末の。
^  (パターンの先頭にある時のみ)行頭にマッチ  ^○ 行頭の○
\n
(n:0-9)
 キャプチャ済の部分正規表現に対する後方参照    
[:..:] POSIX文字クラス表現 [:alnum:] アルファベットと数字。[0-9A-Za-z]と等価。
[:alpha:] アルファベット。[A-Za-z]と等価。
[:blank:] 空白orタブ。[△\t]と等価。
[:cntrl:] 制御文字。[\x00-\x1F\x7F]と等価
[:digit:] 10進数。[0-9]と等価
[:graph:] 表示可能な文字。[0x21-0x7E]と等価
[:lower:] アルファベットの小文字。[a-z]と等価
[:print:] 印字可能な文字。[0x20-0x7E]と等価
[:punct:] 句読点or記号。
[:space:] 空白。[△\t\n\v\f\r]と等価
[:upper:] アルファベットの大文字。[A-Z]と等価
[:xdigit:] 16進数。[0-9a-fA-F]と等価
[:ascii:] ascii。[\x00-\x7F]と等価
[:word:] 単語文字。\wと等価

【拡張正規表現】

メタ 意味 使用例 説明
| パターンの論理和 大阪|東京 大阪または東京
直前の文字の1個以上の繰り返しにマッチ  y.+u yから始まってuで終わる4文字以上の文字列
? 直前の文字の0個(=1個もない)または1個にマッチ  abc? ab又は、abc
\ エスケープキャラクタ
\d 半角数字
\D 半角数字以外
\d{4} 4桁の数字
\d{4,} 4桁以上の数字
\d{,4} 4桁以下の数字
\d{4,10} 4~10桁の数字(最長一致)
\d{4,10}? 4~10桁の数字(最短一致)
\u 半角英大文字
\U 半角英大文字以外
\l  (※"l"は小文字のL) 半角英小文字
\L 半角英小文字以外
\n 改行(\x0A) 
\r キャリッジリターン(\x0D) 
\x20 半角スペース。\x<hex><hex>←文字コード
\t タブコード
\s 空白文字
\S 空白文字以外
\w 単語単位
\z EOF(End Of File) 記号 (\x1A) 
\bam\b amという単語。前後に空白。
\Bam\B 単語の途中にあるam。前後に空白なし。
(? 拡張構文 sam(?=ple) sampleの中のsam
sam(?=ple|ba) sampleかsambaの中のsam
sam(?!ple) 後ろが「ple」ではない「sam」
(?<=sam)ple sampleの中のple
(?<=sam|ap)ple sampleかappleの中のple
(?<!sam|ap)ple 前が「sam」か「ap」以外の「ple」
(?i)sample sampleという文字列(大文字小文字同一視)
(?i)sam(?-i)ple sampleという文字列(samは大小文字同一視、pleは小文字限定)

【逆引きサンプル】

やりたいこと 正規表現 備考
桁区切りのカンマ付数字列 \b\d{1,3}(,\d{3})*\b  
価格(先頭が「\」の桁区切り付数字列) \\\d{1,3}(,\d{3})*\b
whで始まる3文字以上の単語 \b[Ww]h.+?\b
数字列 \d+
郵便番号 (〒|ZIP:)\d{3}-\d{4}
電話番号 0\d{1,4}-\d{1,4}-\d{4}
携帯電話番号(ハイフンなし) 0[89]0\d{8}
メールアドレス [\w.\-]+@[\w\-]+\.[\w.\-]+
URL(ホームページアドレス) https?://[\w/:%#\$&\?\(\)~\.=\+\-]+
日付 \d{4}[/\.年]\d{1,2}[/\.月]\d{1,2}日?
見出しタグ開始(h1~h3まで) <[hH][1-3].*?>
見出しタグ終了(h1~h3まで) </[hH][1-3]>
半角スペースかタブコードの繰り返し [\x20\t]+
奇数 \d*[13579]\b
半角英文字 [\u\l]  (※"l"は小文字のL)
半角英字以外 [^\u\l]  (※"l"は小文字のL)
英単語(半角英文字列) \b[\u\l]+\b  (※"l"は小文字のL)
半角英数字 [\u\l\d]  (※"l"は小文字のL)
大阪府または大阪市 大阪(府|市)
行頭の半角スペースの連続 ^\x20+
空白行 ^\n
なんでも .*
行全体 ^.*$
2つのキーワードを含む行を抽出する。
①sUnitNo②==
^(?=.*sUnitNo)|(?=.*==).*$
N1又はV1にマッチ [NV]1
【置換】
コメント/*~*/の除去
s:/\*.*?\*/::sg
s:/\*+[^*]*(\*^/]|[^*)*\*+/::sg
 
【置換】
パス名からファイル名部分だけ
S/^.*\///  ←Linux
S/^.*\\//   ←Windows形式
 
【置換】
ファイル名から拡張子を除去
S/\..*$//     ←すべての拡張子を削除
S/\.[^.]*$//       ←最後の拡張子だけ削除
 
【置換】
「yas」を「ryu」に置換
変更前で、()で指定することで、変更後の塊として指定できる。
変更前:(^.*)yas(.*)
変更後:$1ryu$2