Upgrade to Pro — share decks privately, control downloads, hide ads and more …

初めての正規表現(regex)

 初めての正規表現(regex)

Avatar for MIKIO KUBO

MIKIO KUBO

May 18, 2025
Tweet

More Decks by MIKIO KUBO

Other Decks in Education

Transcript

  1. 目次 1. 正規表現ってなに? 2. 基本的なメタ文字 (1) 3. 基本的なメタ文字 (2) 4.

    文字クラス [] 5. 量指定子 * + ? {} 6. グループ化 () と選択 | 7. よく使う特殊シーケンス 8. 簡単な使用例 9. 学習ツールと練習 10. まとめ 2
  2. 1. 正規表現ってなに? 正規表現 (Regular Expression, Regex, regexp) は、文字列のパターンを表現するための特殊な文字列 です。 何が便利?

    検索: 特定のパターンの文字列を探す (例: メールアドレス、電話番号) 置換: 文字列の一部を別の文字列に置き換える 検証: 入力されたデータが特定の形式に合っているか確認する (例: パスワードの強度チェック) 抽出: 文字列から必要な部分だけを取り出す ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ (これはメールアドレスのパターンの一例です) 3
  3. 2. 基本的なメタ文字 (1) メタ文字: 通常の文字とは異なり、特別な意味を持つ文字。 . (ドット) 意味: 任意の一文字 (改行文字を除くことが多い)

    例: a.c は abc , axc , a1c などにマッチ マッチ: abc , a c , a_c アンマッチ: ac , abbc ^ (キャレット/ハット) 意味: 行の先頭 (または文字列の先頭) 例: ^Hello は Hello world にはマッチするが、 world, Hello にはマッチしない マッチ: Hello world アンマッチ: Hi, Hello 4
  4. 3. 基本的なメタ文字 (2) $ (ドル記号) 意味: 行の末尾 (または文字列の末尾) 例: world$

    は Hello world にはマッチするが、 world is beautiful にはマッチしない マッチ: Hello world アンマッチ: world and more \ (バックスラッシュ/円マーク) 意味: エスケープ文字。メタ文字の特別な意味を打ち消し、通常の文字として扱いたい場合に使用。 例: \. はドット . という文字そのものにマッチする。 \$ は $ という文字にマッチ。 example\.com は example.com にマッチ a\.b は a.b にマッチ ( a_b にはマッチしない) 注意: プログラミング言語やツールによっては、バックスラッシュ自体をエスケープするために \\ と書 く必要がある場合があります。 5
  5. 4. 文字クラス [] (1) 角括弧 [] で囲まれた部分は「その中のいずれか一文字」にマッチします。 [abc] 意味: a

    または b または c のいずれか一文字 例: gr[ae]y は gray と grey にマッチ マッチ: gray , grey アンマッチ: grby [0-9] 意味: 0 から 9 までのいずれかの数字一文字 (範囲指定) 例: [0-9][0-9] は 00 から 99 までの2桁の数字にマッチ マッチ: 12 , 99 アンマッチ: a1 , 123 6
  6. 4. 文字クラス [] (2) [a-zA-Z] 意味: アルファベット小文字または大文字のいずれか一文字 例: [A-Z] は大文字アルファベット一文字にマッチ

    [^abc] (否定の文字クラス) 意味: a でも b でも c でもない任意の一文字 例: [^0-9] は数字以外の文字にマッチ 7
  7. 5. 量指定子 * + ? {} 直前の文字やグループが何回繰り返すかを指定します。 * (アスタリスク) 意味:

    直前の文字の0回以上の繰り返し 例: ab*c は ac , abc , abbc , abbbc などにマッチ マッチ: ac , abc , abbbbbc アンマッチ: axc + (プラス) 意味: 直前の文字の1回以上の繰り返し 例: ab+c は abc , abbc などにマッチ ( ac にはマッチしない) マッチ: abc , abbbbbc アンマッチ: ac 8
  8. 5. 量指定子 * + ? {} ( 続き) ? (クエスチョンマーク)

    意味: 直前の文字の0回または1回の出現 例: colou?r は color と colour にマッチ マッチ: color , colour アンマッチ: colouur {n} 意味: 直前の文字のちょうど n 回の繰り返し 例: a{3} は aaa にマッチ マッチ: aaa アンマッチ: aa , aaaa 9
  9. 5. 量指定子 * + ? {} ( 続き) {n,} 意味:

    直前の文字の n 回以上の繰り返し 例: a{2,} は aa , aaa , aaaa などにマッチ マッチ: aa , aaaaa アンマッチ: a {n,m} 意味: 直前の文字の n 回以上 m 回以下の繰り返し 例: a{2,4} は aa , aaa , aaaa にマッチ マッチ: aa , aaa , aaaa アンマッチ: a , aaaaa 10
  10. 6. グループ化 () と選択 | () (丸括弧) 意味: 複数の文字をグループ化し、量指定子などを適用する。また、マッチした部分を後から参照で きる(キャプチャ)。

    例1: (ab)+ は ab , abab , ababab などにマッチ マッチ: ab , abab アンマッチ: a , b , aba 例2: ^(IMG|PIC)-[0-9]+\.jpg$ IMG-123.jpg や PIC-456.jpg にマッチ | (パイプ/縦線) 意味: OR (または)。 A|B で A または B のいずれかにマッチ。 例: apple|orange は apple または orange にマッチ マッチ: I have an apple. , I have an orange. アンマッチ: I have a banana. 11
  11. 7. よく使う特殊シーケンス バックスラッシュ \ と特定の文字を組み合わせたもので、よく使う文字の種類を短く表現できます。 \d (digit) 意味: 任意の数字一文字。 [0-9]

    と同じ。 例: \d{3}-\d{4} は 123-4567 のような郵便番号 (日本の旧形式) にマッチ \w (word character) 意味: 任意の英数字またはアンダースコア _ 。 [a-zA-Z0-9_] と同じ。 例: \w+ は1文字以上の英数字または _ の連続にマッチ (例: user_name , var123 ) \s (whitespace character) 意味: 任意の空白文字 (スペース、タブ、改行など)。 例: hello\sworld は hello world (スペース区切り) にマッチ 大文字版 ( 否定): \D : 数字以外の文字 ( [^0-9] ) 12
  12. 8. 簡単な使用例 文字列: My email is [email protected] and phone is

    090-1234-5678. メールアドレスを抽出したい: [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,} マッチ: [email protected] 電話番号 ( 日本の携帯) を抽出したい: 0[789]0-\d{4}-\d{4} マッチ: 090-1234-5678 "email" という単語があるか ( 大文字小文字問わず): email (多くのツールで /i フラグなどで対応) ま たは [Ee][Mm][Aa][Ii][Ll] マッチ: email 13
  13. 9. 学習ツールと練習 オンライン正規表現テスター: Regex101 (regex101.com): 非常におすすめ! 正規表現を入力し、テスト文字列で試せる マッチ部分のハイライト 各部分の解説表示 様々な言語のフレーバー

    (PCRE, Python, JavaScriptなど) に対応 RegExr (regexr.com) その他多数 実際に使ってみるのが一番! テキストエディタの検索機能 (VS Code, Sublime Textなど) プログラミング言語の正規表現ライブラリ (Pythonの re モジュール、JavaScriptの RegExp オブ ジェクトなど) Linuxの grep コマンド 14
  14. 10. まとめ 正規表現は文字列のパターンマッチングに強力なツール。 基本要素: メタ文字: . ^ $ \ 文字クラス:

    [] [^] 量指定子: * + ? {n} {n,} {n,m} グループ化と選択: () | 特殊シーケンス: \d \w \s など 最初は難しく感じるかもしれませんが、少しずつ覚えていくと非常に便利です。 オンラインテスターなどを活用して、実際に手を動かして試してみましょう! 15