Open10

[Scrap] 正規表現ネタ帳

ピン留めされたアイテム

正規表現を考えるステップ

1. 正規表現 簡易チェッカー

以下の表を眺めつつ、

https://murashun.jp/article/programming/regular-expression.html

想定されるパターンを正規表現ツールに打ち込んで考える。

https://www.ymori.com/regexcheck/
以下のツールで Visualize して把握するのもいい。
https://regex-vis.com/

2. 自分の使用している言語での挙動を考える。(例: TypeScript など)

コードから離れて Playground を使用するのも良い。

https://playcode.io/new/

3. どうしても忘れてる場合

マンガを副読本にして作業する。

https://www.amazon.co.jp/dp/B08L4FDS86/ref=cm_sw_r_tw_dp_A5R43GZ4KQ8WT9GH5TP2?_encoding=UTF8&psc=1

避けてきた正規表現が必要になってきたので覚えようと思います。

正規表現チェッカー

https://weblabo.oscasierra.net/tools/regex/

正規表現簡易チェッカー

これは便利。使いやすい。

https://www.ymori.com/regexcheck/

考え方

  • あいまいな部分と固定の部分を分けて考える
  • さらに、曖昧の度合いが異なる部分を分離して、それぞれの曖昧さを正規表現で指定する(って感じ?)

そもそも正規表現は、

  • マッチするメタ文字などの規則
  • 文字列置換用の記法($1) など

上記の二つが含まれる。

繰り返し

? はあってもなくてもの時 & 繰り返しは含まない。

先読みマッチ

2000年という文字列があった場合、\d+年だと2000年にマッチ。\d+(?=年)だと 2000 にマッチする。
単位を含めて検索したいけど、マッチ文字列に単位を含めたくない場合に使用する。
多くのものにマッチしすぎている時に絞り込みをかける考え方で使用することもありそう。

// 西暦2000年の'2000'にマッチする
(?<=西暦)\d+(?=年)

否定的先読みはあいまいなものには使いづらそう。

グルーピングの入れ子構造

グルーピングが入れ子になる場合は外側が $1 になる。

(\d{1,3}(,\d{3})*)-
ログインするとコメントできます