第10話……正規表現講座28,29,30回目(最終回)

いよいよこの講座も最終回です。

ここでは、今までの集大成として、実際の応用にも役立つ3つのテーマを扱います。

最後まで読んでくださった皆さん、本当にありがとうございました。


第28回『英字と数字の両方を含むパスワードをチェック』


たとえば「8文字以上で、英字と数字の両方を含む」文字列を検索したいとします。

このとき、以下のような正規表現を使うことで目的を達成できます:


(?=.*[A-Za-z])(?=.*[0-9])[A-Za-z0-9]{8,}


この正規表現の意味:


- `(?=.*[A-Za-z])` → 英字が1文字以上含まれている

- `(?=.*[0-9])` → 数字が1文字以上含まれている

- `[A-Za-z0-9]{8,}` → 英字と数字だけで構成されており、8文字以上


このパターンは、WZエディターでも動作確認済みです。


【演習】

以下の文字列のうち、上記の条件にマッチするものを答えてください。


文字列一覧:

abc12345

password

12345678

pass1234


解答:

abc12345、pass1234


質問


`?=` の意味は?


回答


これは、「この先に○○があるか、チラッと見るだけ」という意味です。


- 「○○がちゃんとあるか?」をチェックするだけ。

- でも、実際にはその文字を取り出したりはしない。

- 先を見るけど、そこに止まらずに通りすぎる感じ。


これを専門用語では「先読み(さきよみ)」とか「ポジティブ・ルックアヘッド」って呼びます。


例で説明するね


たとえば、こんなふうに書いたとします:


(?=abc)


これの意味は、


> 「この場所から先に、`abc` っていう文字があるか見るだけ!」


ということ。


でもポイントは

👉 「`abc` を本当に取り出したり、マッチしたりするわけじゃない」

ということ!


イメージ図


たとえばこういう文字があったとする:


123abc456


ここで `(?=abc)` を使うと・・・


- `1` → 先を見た → `23a` → 違う

- `2` → 先を見た → `3ab` → 違う

- `3` → 先を見た → `abc` → これだ!


っていう感じで「見て確認だけする」。


でも、見つけても、`abc` そのものを取ったりはしないんです。

(あくまで「あるかどうか」チェックするだけ!)


超ざっくりまとめ



`(?=○○)` |「この先に○○があるか見るだけ!実際には○○は取らない!」 |



第29回『複数の条件を同時に扱う OR の応用』


| を使うと「または」という意味になりますが、組み合わせて使うと強力です。


例:

「cat または dog という単語にマッチさせたい」


正規表現:

(cat|dog)


このように () と | を組み合わせることで、複数の選択肢を一つのパターンで扱えます。


【演習】

以下の文から「りんご」または「バナナ」にマッチする正規表現を書いてください。


文:

私はりんごが好きです。バナナもよく食べます。


解答:

(りんご|バナナ)


第30回『正規表現で文字列を置換して整形する』


検索だけでなく、置換にも正規表現はとても役立ちます。


たとえば、日付の形式を整える:


元のデータ:

2024/04/20


検索:

(\d{4})/(\d{2})/(\d{2})


置換:

\1年\2月\3日


→ 結果:

2024年04月20日


【演習】

次のようなファイル名一覧から、拡張子「.txt」を取り除く正規表現を書いてください。


文:

report.txt

memo.txt

note.txt


検索:

\.txt


置換:(空欄)


→ 結果:

report

memo

note


最終回まで読んでくださってありがとうございました。

正規表現は、はじめは難しく感じるかもしれませんが、一つ一つを理解していけば、確実に身につきます。


あなたがこの講座を通して、「あ、これ使えるかも!」と思える瞬間があったなら、何よりうれしく思います。

これからも楽しく、便利に、正規表現を使いこなしてください!


【付録】検索と置換の違いについて(テキスト版)


ここでは、正規表現を使った検索と置換について、基本的な考え方をテキストだけで整理しておきます。


■ 検索と置換の役割は違う


【検索(Search)】

・正規表現として解釈する

・特別な記号(\d, \s, \w, . など)が使える

・たとえば、\. はドットそのものにマッチする


【置換(Replace)】

・基本は普通の文字列

・特別な意味はない(そのまま文字列として置き換える)

・たとえば、[dot]と書けば、文字列 [dot] に置き換わる


■ 簡単にまとめると


・検索側は「正規表現」で高度な検索をする

・置換側は「普通の文字列」でそのまま置き換える


※ただし例外として、置換側でも後方参照(\1、\2など)を使う場合は、正規表現の知識が必要になります。


■ 後方参照の例(ちょっと応用)


検索:

(\d{4})/(\d{2})/(\d{2})


置換:

\1年\2月\3日


この例では、

・検索で「2024/04/20」などをキャプチャし、

・置換で「2024年04月20日」に変換しています。


ここでは置換側に「\1」「\2」「\3」という特別な記号を使っています。

(グループ番号に対応した置き換え)


■ ポイントまとめ


・通常の置換は普通の文字列をそのまま入力すればよい

・検索では正規表現を使う

・置換側に特殊記号を使うのは「後方参照」の場合だけ


この基本を理解しておけば、よりスムーズに正規表現と置換を活用できるようになります!

  • Xで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る