第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」という特別な記号を使っています。
(グループ番号に対応した置き換え)
■ ポイントまとめ
・通常の置換は普通の文字列をそのまま入力すればよい
・検索では正規表現を使う
・置換側に特殊記号を使うのは「後方参照」の場合だけ
この基本を理解しておけば、よりスムーズに正規表現と置換を活用できるようになります!
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます