寝ゲロ部屋

うんこ垂れ蔵の寝ゲロ部屋

覚えておきたい正規表現

正規表現の忘備録。ほぼ自分用。

あとで見返して使いにくいと思ったら

正規表現の書き方だけ別記事にするかもしれない。

目次

 

正規表現とは

検索したい文字列(パターン)を指定する共通の表記法

 

正規表現の主な用途

[基本]

膨大なテキストデータから特定の文字列のパターンを探す。

(Excelならフィルタとかカウント関数って便利な機能があるから対象外)

[応用]

探し当てた文字列の使い方

・別の文字列に置換する (←業務ではこれがメイン)

・ログデータの期間範囲を指定して障害を探る

・カウントする (←プログラムでよく使う)

 

使える場面

[プログラミング]

Java → java.util.regex.Pattern、java.util.regex.Matcher

PatternとMacherのインスタンス作ったあとに

Macherのfindメソッド呼び出すのめんどくせぇタヒねと

独り言ブツブツ言いながら書いてる。

 

JavaScript → match 、testメソッド

 大 正 義 。愛してるぜ。

 

他のオブジェクト指向・関数型・スクリプト言語…ほとんどの言語で使えるはず。

正規表現のライブラリ、パッケージ、クラスは業務でも許可されているはず。

 

C言語では<regex.h>なんて物があるらしいけれど、

Cだけをがっつり使ってる市場は大体ウン十年前のレガシーコードの

リファクタリングないし機能追加だろうから実際は一文字ずつ見てるような

気合実装してるところがほとんど。正規表現使うの諦めるしかない・・・

[テキストエディタ]

・置換機能

大好き。愛してる。サクラエディタとか秀丸とか。

一部の熱狂的なHENTAIはvimemacs使ってるけれど、

そんなHENTAIは正規表現使いこなしてるだろうからこの記事は対象外。

 

よく使う正規表現テンプレ

検索したいパターンを網羅するように書いています。

これ以外の数字の入力は全て殺すってくらい殺意溢れる書き方なので、

前提さえしっかりしていればここまで書き込む必要はない。心配性ならこの通りで。

検索対象としたいところを書き換えればいくらでも応用可です。

[日付]

正規表現だけでhh:mm:60のうるう秒表現とか、

うるう年判定させようってクソ設計でなければこれでいける。

YYYY/MM/DD形式「[1-3]\d{3}/([0][1-9]|[1][0-2])/([0-2][0-9]|[3][01])

YYYY年MM月DD日 形式「[1-3]\d{3}([0][1-9]|[1][0-2])([0-2][0-9]|[3][01])

(例1)12月を検索する

[1-3]\d{3}/12/([0-2][0-9]|[3][01]

(例2)2012年08月から11月を検索する

2012/([0][8-9]|[1][0-1])/([0-2][0-9]|[3][01])

 

hh:mm:ss形式「([01][0-9]|[2][0-3]):[0-5][0-9]:([0-5][0-9])

hh:mm:ss形式(うるう秒考慮)「([01][0-9]|[2][0-3]):[0-5][0-9]:([0-5][0-9]|60) 

(例)12:00:45から12:30:10までの範囲検索

→12:00:45~12:00:59、12:01:00~12:29:59、12:30:00~12:30:10で三分割してOR検索

12:00:(4[5-9]|5[0-9])|12:(0[1-9]|[1-2][0-9]):([0-5][0-9])|12:30:(0[0-9]|10)

 

あくまでテキストエディタでログを見る時の検索用の書き方。

スケジューラを使えばいいのにこんなmacherをコード上で見たら

設計・ないしコード書いた人を桜の木の下に埋めても良い。

 

[オプション]

〇〇〇、△△△には上の正規表現をぶっこめばOK

検索「〇〇〇」

OR検索「〇〇〇|△△△|□□□|・・・」好きな数だけ「 | 」で繋ぐ

前方一致「^〇〇〇」

後方一致「〇〇〇$」

完全一致「^〇〇〇$」

 

力尽きた。あとで加筆する。

 

参考サイト

サルにもわかる正規表現入門