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")
いろんな正規表現がありますね。
組み合わせ次第だでやり方無限大ですね。おもしろーい。