正規表現をゼロから学ぶ:30分でマスターするテキスト処理

编程语言

なぜ正規表現を学ぶのか?

1行の正規表現で20行の文字列処理コードを置き換えられます。

1000行のログからすべてのIPアドレスを抽出する場合——通常のコードでは20行以上。正規表現なら:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} の1行で完了。

このチュートリアルは完全な初心者を想定しています。30分後には日常的なテキストマッチングの80%を処理できるようになります。


基本構文

リテラル文字とメタ文字

文字 意味
abc 完全一致"abc" hello → "hello"にマッチ
. 任意の1文字(改行除く) h.t → hat, hot, hit
\d 数字 [0-9] \d{3} → 123, 456
\w 単語文字 [a-zA-Z0-9_] \w+ → hello, test123
\s 空白文字(スペース、タブ、改行) a\sb → "a b"
\D 数字以外 \D+ → hello
\W 単語文字以外 \W → @, #, !

数量子

数量子 意味
* 0回以上 ab*c → ac, abc, abbc
+ 1回以上 ab+c → abc, abbc(acを除く)
? 0回または1回 colou?r → color, colour
{n} ちょうどn回 \d{4} → 4桁の数字
{n,} n回以上 \d{4,} → 4桁以上の数字
{n,m} n回からm回 \d{3,5} → 3〜5桁の数字

文字クラス

[a-z]     小文字
[A-Z]     大文字
[0-9]     数字
[a-zA-Z]  すべてのアルファベット
[^0-9]    数字以外(^は[]内で否定を表す)
[abc]     a、b、cのいずれか

アンカー

アンカー 意味
^ 行頭 ^Hello → Helloで始まる行
$ 行末 world$ → worldで終わる行
\b 単語境界 \bcat\b → 独立したcatのみ(catchは除外)

グループ化とキャプチャ

(\d{3})-(\d{4})-(\d{4})  電話番号 138-0000-1111 にマッチ
$1 = 138, $2 = 0000, $3 = 1111

ツール庫の正規表現ツールで置換機能を使うと:$1****$3 で中央4桁を 138-****-1111 にマスクできます。

非キャプチャグループ

(?:\d{3})  グループ化のみでキャプチャしない($1/$2は生成されない)

先読み・後読みアサーション(応用)

構文 意味
(?=...) 後に...が続く \d+(?=円) → "100円"の100にマッチ
(?!...) 後に...が続かない \d+(?!円) → "100円"の100にはマッチしない
(?<=...) 前に...がある (?<=¥)\d+ → "¥100"の100にマッチ
(?<!...) 前に...がない (?<!¥)\d+ → "¥100"の100にはマッチしない

実践レシピ

メール:    [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
電話番号:  1[3-9]\d{9}
URL:       https?://[^\s/$.?#].[^\s]*
身分証明書:\d{17}[\dXx]
中国語:    [\u4e00-\u9fa5]
IPアドレス:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
日付:      \d{4}-\d{2}-\d{2}

よくある落とし穴

1. 貪欲 vs 遅延

貪欲: <.*>   "<div>hello</div>" → 文字列全体にマッチ(欲張り)
遅延: <.*?>  "<div>hello</div>" → <div>と</div>のみマッチ

? を付けて数量子を遅延モードに。

2. 壊滅的バックトラッキング

# 危険な書き方
(a+)+b  "aaaaaaaaaaaaaaaaaaaa" にマッチ → パフォーマンス爆発

# 安全な書き方
a+b     単純明快、数量子をネストしない

3. . は改行にマッチしない

# 複数行コンテンツのマッチ
[\s\S]*  .* の代わりに(改行を含むすべての文字にマッチ)

応用レシピ集

ログ分析用

シーン 正規表現 説明
Nginxアクセスログ (\S+) - - \[([^\]]+)\] "([^"]*)" (\d+) (\d+) IP、時間、リクエスト、ステータス、バイト数
Java例外スタック (\w+Exception): (.+?)\n\s+at (.+) 例外タイプ、メッセージ、呼び出し位置
ISO 8601タイムスタンプ \d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}[Z+-] ミリ秒単位のISOタイムスタンプ

コードレビュー用

シーン 正規表現 説明
Console.log残留 console\.(log|warn|error|debug)\( デバッグコード検索
TODO/FIXME (TODO|FIXME|HACK|XXX): 未完了タスクの検索

実践練習

ツール庫の正規表現テスターで以下の練習をしてみましょう:

  1. 「私の電話番号は138-1234-5678、オフィスは010-12345678です」からすべての電話番号を抽出
  2. 「2026-06-03」を「06/03/2026」に置換
  3. テキスト内の重複単語を検出

この3つの練習を完了すれば、正規表現の基礎はマスターです。テキスト置換テキスト差分と組み合わせれば、テキスト処理能力が大きく向上します。

ブラウザローカルツールを無料で試す →

#正则表达式#Regex#文本处理#编程入门#开发工具