正規表現を覚えよう。

 

SublimeTextでよく使う正規表現。とっても便利。
「 SublimeText 」と「 正規表現 」でどんだけ早くデータ整形できることか!

だけど、正規表現まだ検索しちゃってる。。。
「あ、そうだ覚えよう。」

というか、その前に全然まだ正規表現わかってなかったので、
ドットインストール受講しました^^

とりあげること

・「+」 VS 「*」
・「\d」 VS 「[0-9]」
・「\b」
・いろんな「?」
・文字クラスと「|」(選択子)
・いろんな「改行」
・キャプチャをつかっての置換

 

「+」 VS 「*」

どっちっけ?ってなるので^^;
・「+」 …1回以上の繰り返し。 ={1,}
・「*」 …0回以上の繰り返し。 ={0,}

以下のようなデータがあって、「a0001」「bcdef」「00002」の両方を検索にヒットさせたい時。

a0001
bcdef
00002

「+」のみを使った以下のパターンだと「a0001」しかヒットしません。

[a-z]+[0-9]+

 

しかし、

 

「*」のみを使った以下のパターンだと
「a0001」「bcdef」「00002」の全てがヒットします。

[a-z]*[0-9]*

 

さらに

「a0001」「bcdef」だけヒットさせたいとき

[a-z]+[0-9]*

「a0001」「00002」だけヒットさせたいとき

([a-z]|[0-9])*[0-9]$

「bcdef」「00002」だけヒットさせたいとき

^([a-z]*|[0-9]*)$

 

「\d」 VS 「[0-9]」

ドットインストールを見るまでしらなかったんですが、「\d」っていうのがあるんでうすね。「[0-9]」派でした。

さらに否定形の書き方がそれぞれ違ったので発見でした。

「\d」の否定形→「\D」

「[0-9]」の否定形→「[^0-9]」
※ 「^」は「 [」の直後のみ否定を表す。「^[0-9]」だと行の先頭が数字のものが該当する。

 

「\b」

単語の境界…単語のみをマッチさせたい時つかう

例えば、「curry」のみをヒットさせたい時、
「curry」だと全ての単語のcurryにヒットしてしまうので、
「\bcurry\b」とすると一番上の「curry」のみにヒットさせることができます。

curry
curryrice
currypan

 

いろんな「?」

「?」って2つの役割があります。
・「?」 → 1回の繰り返し。 ={0,1}
・最も短い文字でマッチさせる

「”.+”」 → 最も長い文字にマッチしてしまう(通常)のため、「”apple”, “apples”, “pineapple”」の全てがヒットする。
「”.+?”」 → 最も短い文字でマッチする。「”apple”」「 “apples”」「”pineapple”」のそれぞれがヒットする。

"apple", "apples", "pineapple"

 

いろんな「改行」

「\r\n」→ 改行(Windows)
「\r」→ 改行(v9までのmacOS)
「\n」→ 改行(v10からのmacOS)
「\r\n|\r|\n」→ 改行(すべて)

キャプチャをつかっての置換

「()」で囲った部分「$n」に格納し、それを使って、置換ができる。

phpのpreg_matchでも使えた!
以下のようなデータがあって、「id={id},name={name}」みたいな形式に変換したいときとかに使えます。
sublimeでは shift + command + F で検索&置換の機能を使います。
Find: (.+),\s?(.+)
Replace: id=$1,name=$2

置換前

1, taro
2, jiro
3, saburo

置換後

id=1,name=taro
id=2,name=jiro
id=3,name=saburo

 

phpのpreg_replaceだと、こんな感じ。

preg_replace("/(.+),\s?(.+)/", 'id=$1,name=$2', "1, taro")

 

いろんな正規表現がありますね。

組み合わせ次第だでやり方無限大ですね。おもしろーい。

 

SublimeTextでよく使うショトカットキー集

 

参考:https://qiita.com/seafield1979/items/56d4833dae818dcf85ae

SublimeTextは便利です!(PhpStorm・Atomも勿論いいけど)
たまに忘れるのでメモ程度によく使うコマンドを書き溜めますう。

Macです!

● いろいろ

コマンドパレットを開く Cmd + Shift +「P」
拡大 Cmd + Shift + 「+」
縮小 Cmd + 「-」

● 編集

履歴から貼り付け Cmd + 「K」,「V」
現在行を複製(下の行に挿入される) Cmd + Shift + 「D」
行の削除 Ctrl + K
コメントアウト Cmd + /
範囲コメントアウト Cmd + Shift + /

● ファイル

フォイルを開く(ファイル名検索できる) Cmd + 「P」
新しいタブを開く Cmd + 「N」
ファイルを閉じる Cmd + 「W」
次(右)のタブに移動 Cmd + Opt + 「→」
次(右)のタブに移動 Cmd + Opt + 「←」

● ウィンドウの分割

2 行に Cmd + Opt + 2
2 列に Shift + Cmd + Opt + 2
4 グリッドに Cmd + Opt + 5

SublimeTextで愛用している機能

 

わたし自身、コード書く時はPHPStomeを使ってるんですが、

メモやCSV整形、CSV/TSV→SQL文とかマークダウン形式に変更するときはSublimeTextをめちゃくちゃ使ってます。

超便利なものがあるんです。ご存知かもしれませんが教えちゃいます。

 

 

DataConverter

たとえばこんなtsv形式のデータがあります。

id title body
1 top トップですよ。
2 detail 詳細ですよ。

↑のSQL文を作る時、まあまあだるいですよね。タイポとかもしたくないし…。

 

\それがなんとSublimeなら一瞬でつくってくれるんです!!!/

 

■事前準備

・DataConverterをInstall Packageしておく。

 

■手順

(1) tsv形式データを開いたタブ上で Ctrl + option + P

(2)「DataConverter: to PosgresSQL」を選択

(※MySQL/SQLite/JSON/CSV/PHP等もあります!)

(3)できあがり。以下のsql文に変換されます。

 

CREATE TABLE IF NOT EXISTS DataConverter (
	id serial,
	id integer,
	title text,
	body text
);
INSERT INTO DataConverter
	(id, title, body)
VALUES
	(1, 'top', 'トップですよ。'),
	(2, 'detail', '詳細ですよ。');

「DataConverter」の部分はテーブル名に合わせて変更し、

id定義は適宜どっちかだけにしてもらえば、もう完成ですね。

(IF NOT EXISTSも必要なければ削除しちゃいましょう。)

 

 

もう一個、最近使ってる機能があります。

Sublimerge

という差分を見る機能。
これはEditerなら大概ある機能なんですが、csvをSublimeで見るのでバックアップファイルとの差分みるときに使っています。

 

■事前準備

・SublimergeをInstall Packageしておく。

 

■手順

(1) 比較対象A,Bのファイルをタブで開いておく

(2)比較対象A(またはB)の上でCtrl + option + P

(3)「Sublimerge: Compare to View…」を選択

(3)現在開いているタブのファイル名がプルダウンが出てくるので比較対象B(またはA)を選択する

(4)差分が出てきます。