🐺

正規表現メモ

2024/12/03に公開

概要

業務で正規表現を作成していた時によく使った正規表現のメモ
自分用の備忘録なので、超基礎的なこととかも含みます。
自分が分かればいいので、雑に書いてあります。

よく使っていた正規表現

\d

数字。1~9の何かしら1文字。
\d{0,10}みたいな感じで文字数の範囲を指定しながら使っていた。

\w

アンダーバーと半角英数字の何かしら1文字。
\w{0,10}みたいな感じで文字数の範囲を指定しながら使っていた。

\S

空白以外の何かしら1文字。
記号、ひらがな、漢字etcが全部含まれている。
\S{0,10}みたいな感じで文字数の範囲を指定しながら使っていた。

\s

空白文字。
正規表現にはほかにも空白文字があるけどこれ1つで済ませてた。
\d{0,10}\sみたいな感じで空白が存在するところに使っていた。

\n、\r\n

改行コード。
正規表現にはほかにも空白文字があるけ\n、\r\nのどっちかを使ってた。
この2つの違いは知らない。OSで違うみたい。ちゃんと調べた方がいい。
\d{0,10}\nみたいな感じで改行が存在するところに使っていた。
欲張りたいときは\d{0,10}(\n|\r\n)

*

直前のパターンを0回以上連続させるやつ。
\s*みたいな感じで使っていた。

+

直前のパターンを1回以上連続させるやつ。
\s+みたいな感じで使っていた。

?

直前のパターンを0回又は1回連続させるやつ。
最初どこで使うのか分からなかったけど、使ってみると意外とできるやつ。便利。
\s?みたいな感じで使っていた。

{N,M}

直前のパターンを連続させるやつ。
1.{2} 直前のパターンを2回連続
2.{2,} 直前のパターンを2回以上連続
3.{,2} 直前のパターンを2回以下連続
4.{2,10} 直前のパターンを2回以上10回以下連続
色々使い方がある。
よく使っていたのは4番目。
\d{0,10}みたいな感じで使っていた。

[abc]

カッコのなかの文字から何かしら1文字。
制限したい文字があるときに使っていた。
[\r\n|\s]みたいな感じで使っていた。

[^abc]

カッコのなか以外の文字から何かしら1文字。
制限したい文字があるときに使っていた。
[^A-Z\s\r\n]みたいな感じで使っていた。

A|B

SQLでいうところのOR。
(\n|\r\n)みたいな感じで使っていた。
カッコをつけないと見づらいのでカッコで囲むこうにしている。

$

テキストの最終位置。
\d{1,10}[\s\S]*?(?=\r\n\d{1,10}|$)みたいな感じで使っていた。
データの始まり~何かしらデータ(どんな文字も入る)~次のデータの始まり~テキスト終了
こんな感じのデータから次のデータの始まり~テキスト終了を取りたいときに使っていた。

.*

同じ行の最後まで取得してくれるやつ。
行をまとめて取得するときに便利。
\d{0,10}.*みたいな感じで条件に合致する行を取得する時に使っていた。

[\s\S]*?

全ての文字を取得してくれるやつ。
[\s\S]が全ての文字って意味。
?が貪欲マッチというやつ。あんまり意味が分かっていない。
複数行まとめてマッチさせるときに使っていた。
\d[\s\S]
?(?=\d)みたいな感じで使っていた。
今回の業務では正規表現で規則性のあるデータを抜き出す正規表現を作成する感じで、
データの始まり~何かしらデータ(どんな文字も入る)~次のデータの始まり
みたいなデータが多かったので肯定・先読みと合わせた使い方が多かった。

(?=R)

肯定先読み。
カッコの中に一致する文字を探すけど、結果には反映されない。
肯定先読みの前の文字までをマッチする。便利。
(?<=\r\n)\d{1,10}[\s\S]*?(?=\r\n\d{1,10})みたいな感じで使っていた。

(?<=R)

肯定後読み。
カッコの中に一致する文字を探すけど、結果には反映されない。
肯定後読みの後の文字をマッチする。便利。
(?<=\r\n)\d{1,10}[\s\S]*?(?=\r\n\d{1,10})みたいな感じで使っていた。

正規表現を作成するときに使っていたサイト

https://www-creators.com/tool/regex-checker
https://www.tohoho-web.com/ex/regexp.html#line_tail
https://dotnetfiddle.net/

初めて記事を書いてみて

markdown記法を全く使ったことがなかったので、Zenn公式様の(https://zenn.dev/zenn/articles/markdown-guide) を見ながら書いてました。公式様の優しさが沁みます。

Discussion