>100 Views
April 22, 26
スライド概要
はじめまして、ALJ Education Plus 株式会社のyukikoと申します。 IT教育支援や、DX推進が可能です。 ◆ スキル LPIC レベル2 AI / Python Splunk BI(データ可視化・分析) ◆ その他 新卒・未経験の学生向けに、エンジニア転職を応援する資料を趣味で作成しています。 もしよろしければご活用ください。 ◆IT研修講師をお探しの方は [email protected] にお気軽にお問い合わせください。 ※ALJ Education Plus 株式会社を通して、ご支援させていただきます。 ◆Zenn https://zenn.dev/yukiko_sapporo/articles/46c13e9f98b110
LPIC-101 v5.0 | 小豆 本対 応 正規表現の文字クラス [a-z] で単一の小文字にマッチさせる 新卒・文系・未経験のための IT 研修 POSIX形式 [:lower:] も合わせて覚える うさうさラーメン店方式
PROBLEM 今日のお題 ― B問題セット 問17 単一の小文字を表す正規表現はどれですか。 1 :LOWER: 2 [a-z] 3 !AZ 4 %c 5 {az} ※ 単一選択(正解は1つ) LPIC-101 | 正規表現 ― 文字クラス [a-z] 2 / 10
① この用語 正規表現の「文字クラス」 用語 [a-z] 文字クラス(Character Class) うさうさラーメン店で例えると お得セット: 「トッピングは[卵・ネギ・海苔・メンマ]」 から1つ選んでください [ ] は「この中のどれか1文字」 にマッチさせる記号。 ↓ a-z のようにハイフンを挟むと 「範囲」を指定できる。 → [a-z] = a, b, c, ... z の いずれか1文字(合計26通り) [a-z] = 小文字の中から 「どれか1文字」を選ぶ券 26通りのどれか1つがマッチ LPIC-101 | 正規表現 ― 文字クラス [a-z] 3 / 10
② 簡単に [a-z] 基本の文字クラス早見表 小文字1文字 a, b, c, ... z [0-9] 大文字1文字 A, B, C, ... Z 数字1文字 0, 1, 2, ... 9 [A-Za-z0-9] [A-Z] [A-Za-z] 英字1文字 a-z と A-Z のどれか 英数字1文字 a-z, A-Z, 0-9 のどれか [^a-z] 小文字以外(否定) ^ で否定。A-Z, 数字, 記号 ★ 覚え方: [ ]内に範囲を書くと「そのどれか1文字」。^ で始めると否定。 LPIC-101 | 正規表現 ― 文字クラス [a-z] 4 / 10
POSIX文字クラス ― [:lower:] も同じ意味 ③ 詳しく① [a-z] と全く同じ意味を、名前で書ける書式が POSIX 文字クラス 範囲記法(短い) POSIX記法(明示的) ≡ [a-z] [[:lower:]] どこでも使える(BRE/ERE共通) ロケール依存。意図が伝わる 代表的な POSIX 文字クラス [:lower:] =[a-z] 小文字 [:alpha:] [:upper:] =[A-Z] 大文字 =[A-Za-z] 英字 LPIC-101 | 正規表現 ― 文字クラス [a-z] [:alnum:] 英数字 [:digit:] =[0-9] 数字 =[A-Za-z0-9] [:space:] =空白類 スペース・タブ・改行 5 / 10
③ 詳しく② 紛らわしい無効な記法 ― 他の選択肢の正体 :LOWER: POSIXっぽいが違う !AZ !は正規表現で使わない %c printf のフォーマット {az} ブレース展開と混同 → 正しいPOSIX記法は [:lower:]。全体を [ ] で囲み、大文字も不可。 → ! に特別な意味はない。否定は [ ] の中の ^ を使う([^A-Z] など)。 → %c は printf/C言語で「1文字表示」の意味。正規表現ではない。 → {} は bash のブレース展開。{a,z} と書いても正規表現としては無効。 ★ 見分け方: [ ] で囲まれていて、中に a-z のような範囲があるか LPIC-101 | 正規表現 ― 文字クラス [a-z] 6 / 10
③ 詳しく③ 実機ハンズオン ― grep / sed で試す [a-z] は BRE・ERE どちらでも使える基本記法。grep/egrep/sed で共通。 Terminal ― grep で試す # 小文字1文字を含む行だけ $ echo -e 'ABC\nabc\n123' | \ grep '[a-z]' abc # POSIXでも同じ結果 $ ... | grep '[[:lower:]]' abc # 否定: 小文字以外にマッチ $ ... | grep '[^a-z]' ABC 123 BRE と ERE ✓ BRE (基本正規表現) grep / sed のデフォルト [a-z] / [^a-z] / ^ / $ . / * が基本メタ文字 ✓ ERE (拡張正規表現) grep -E / egrep / sed -E + / ? / | / ( ) が追加で使える [a-z] は両方で同じ動作 LPIC-101 | 正規表現 ― 文字クラス [a-z] 7 / 10
APPLY 原理原則で5択を斬る # コマンド 判定 理由 1 :LOWER: × 誤り POSIX風だが誤り。正しくは [[:lower:]] で全体を [ ] で囲む必要がある 2 [a-z] ○ 正解 文字クラス+範囲記法。a〜z の小文字26通りのいずれか1文字にマッチ 3 !AZ × 誤り ! は正規表現の記号ではない。否定は [ ] 内で ^ を使う 4 %c × 誤り %c は printf の書式指定子。正規表現とは別の体系 5 {az} × 誤り {} は bashのブレース展開。正規表現では回数指定 ({2,5}) 用 → 正解は 2番。[a-z] = 「小文字26通りの中から1文字」。 LPIC-101 | 正規表現 ― 文字クラス [a-z] 8 / 10
ANSWER 正解 ― 文字クラス [a-z] 正解 ② [a-z] a〜zの小文字26通りから1文字にマッチする文字クラス 3つの書き方を覚える 範囲記法 POSIX記法 否定(応用) [a-z] [[:lower:]] [^a-z] 短い・万能 意図が伝わる 「小文字以外」 LPIC-101 | 正規表現 ― 文字クラス [a-z] 9 / 10
④ 原理原則・一言でまとめ []は 「この中のどれか1文字」。範囲は a-z / 否定は ^ [a-z] [A-Z] [0-9] 小文字26通り 大文字26通り 数字10通り POSIX形式 [[:lower:]] = [a-z] も合わせて覚える 面白きなき世を面白く ─ 石黒 友季子