ポケットリファレンスシリーズ[改訂新版]正規表現ポケットリファレンス

書籍の概要

この本の概要

テキスト処理(文字列処理)における効果抜群のツール、正規表現。
巨大なテキストデータの検索/置換や変換/集計などを行う際,正規表現を使うと作業効率が格段に上がります。本書は,正規表現の代表的なメタキャラクタ,Ruby/Perl/PHP/Java/JavaScript等をカバーした処理系ガイド,知っておきたい正規表現パターンの作り方がわかるパターンレシピ,コンパクトながら正規表現の使い所を押さえたプチプログラムを,一目で引けるリファレンス形式でまとめました。プログラマ必携の1冊です。

追加情報

はじめに ──第2版改訂にあたって

初版『正規表現ポケットリファレンス』の出版から9年ほどが経ちました。この間,インターネットプログラミングの世界では,スマートフォンの台頭,HTML5やJavaScript関連の革新など,テクノロジーやプラットフォームの様々な変化がありました。しかし,依然として,あらゆるプログラミングにおいて,正規表現の重要性はとても高く,すべてのプログラマにとって学ぶ価値の高いものであることは何も変わっていません。
初版は,ある程度のプログラミングができるようになり,これから正規表現にチャレンジしてみたいという方を想定して書かれました。第2版でも同様の読者層を想定しています。第2版では本書執筆時点での最新のプログラミング言語に対応した内容に改訂されました。初版の出版から現在までに,プログラミングにおける日本語環境の状況も変わってきました。以前はShift_JISやEUC-JPなど環境によっていくつかの種類の文字コードが使い分けられ,とくに英語圏などで開発されたプログラミング言語では,日本語環境にうまく対応できていないことが少なくありませんでした。しかし,現在では,Unicodeの普及と対応が進み,日本語対応で悩むこともずいぶん少なくなり,正規表現を活用できる幅がさらに広がっています。
正規表現のスキルはこの先もずっと活用できる資産になるのと同時に,プログラミングが楽しくなるツールにもなります。ぜひ楽しく学んでいただけらたと思っています。

本書の動作確認環境について

本書では,以下のバージョンの処理系にて動作確認を行いました。

  • Ruby 2.2.3
  • Perl 5.21.11
  • PHP 5.6.9
  • ECMAScript(ECMA-262) 5.1 edition
  • Java Platform, Standard Edition 8(1.8.0)

本書の読み方について

筆者の本職はプログラマですが,Perlに出会ってから一部の仕事が劇的に楽になりました。たとえば巨大なテキストファイルからのデータの検索や変換,集計などの雑用仕事。テキストエディタだけでもできなくはないけど,とてつもなく面倒。これが「ちょい」とプログラムを作るだけで簡単にこなせるようになったからです。
Perlが持つ強力なパワーの筆頭が,まさに「正規表現」です。正規表現によって,お堅いコンピュータに曖昧な指示を出すことができるようになったのです。正規表現がなくても根性さえあれば同じ仕事はできるでしょう。でも正規表現を使うことで大幅に「楽」ができる。正規表現を使える人と使えない人とでは,仕事の早さに大きな違いが出るはずです。
はじめのうち,正規表現パターンは暗号文のように感じられるかもしれません。単なる記号であるメタキャラクタを覚えるのは暗記の世界です。しかし,最初からすべて覚える必要はありません。「keyword」のような単純なテキストも立派な正規表現なのです。必要に応じて必要なメタキャラクタを調べて,肉付けしていけばよいのです。正規表現を使いこなすまでの道のりは,それほど長いものではありません。単に「あれば便利」な道具に過ぎないのですから。
本書の使い方ですが,まずはざっと全体に目を通して頂いて,「こんな機能があるのか」程度に,正規表現の機能をおおまかに理解してください。あとは実際に正規表現を使っていく中で「あんな機能があったような気がする」と思ったところで,再度この本を開き,今度はリファレンスとして活用してください。

※『正規表現ポケットリファレンス』(初版より)

本書の読者対象の方について

本書は,いつも利用するツールやプログラミング言語で「正規表現」という単語を見つけ,これを使えば仕事がはかどるのではないかと気付いた方々,すなわち,基礎的なプログラムを書くことができるようになったプログラマや,テキストエディタなどで効率的なテキスト処理をしたい方々を想定して執筆しました。普段,正規表現が利用できるツールをすでに使っている方で,これから正規表現にチャレンジしてみたいという方々に,本書がお役に立てば嬉しく思います。

目次

  • はじめに ――第2版改訂にあたって
  • 本書の動作確認環境について
  • 本書の読み方について
  • 本書の読者対象の方について
  • 目次

第1章 正規表現入門

  • 正規表現の基本
    • 正規表現と文字列のパターン
    • [補足]ワイルドカードと正規表現
  • 正規表現の用途
    • 文字列検索
    • 文字列置換
    • プログラミング
  • [Column] ¥(円マーク)と\(バックスラッシュ)
  • 正規表現の概念
    • マッチする
    • メタキャラクタ

第2章 メタキャラクタ辞典

  • 単一の文字にマッチするメタキャラクタ
    • 単一の文字にマッチするおもなメタキャラクタ
  • 任意の文字にマッチ .(ドット)
    • 量指定子と組み合わせて,任意の文字列にマッチ
  • 単語を構成する文字にマッチ \w
  • 単語を構成する文字以外の文字にマッチ \W
  • 空白文字にマッチ \s
    • 空行にマッチさせたい場合
  • 空白文字以外の文字にマッチ \S
  • 数字にマッチ \d
  • 数字以外の文字にマッチ \D
  • 量指定子メタキャラクタ
    • おもな量指定子メタキャラクタ
  • 0回以上の繰り返しにマッチ ●*
    • *は貪欲なマッチ
    • できるだけ小さな範囲でマッチさせたい場合(*?)
    • 文字列の繰り返しにマッチさせたい場合
  • 1回以上の繰り返しにマッチ ●+
  • n回の繰り返しにマッチ ●{n}
  • n回以上の繰り返しにマッチ ●{n,}
  • n回以上m回以下の繰り返しにマッチ ●{n,m}
  • 0回または1回の出現にマッチ ●?
  • 集合を表すメタキャラクタ
    • 集合を表すおもなメタキャラクタ
  • いずれかの文字にマッチ(文字クラス) [●●●]
    • 範囲の指定
    • 指定された文字以外の文字とマッチ(否定)
  • いずれかのパターンにマッチ(選択) ●●●|●●●
    • グループ化する
    • キャプチャしない括弧
  • 位置を表すメタキャラクタ(アンカー)
    • 位置を表すおもなメタキャラクタ(アンカー)
  • 文字列(行)の先頭にマッチ ^
  • 文字列(行)の末尾にマッチ $
  • 単語境界にマッチ \b
  • 単語境界以外にマッチ \B
  • 後方参照とエスケープ
    • 後方参照とエスケープ
  • すでにマッチしたテキストにマッチ(後方参照) \1,\2,\3……
    • 入れ子の丸括弧
  • エスケープ \

第3章 メタキャラクタ以外の正規表現要素

  • 大文字と小文字を無視する
    • 正規表現を使う
    • 修飾子,オプションなどを使う
  • 日本語の扱い
  • 文字列リテラルのメタキャラクタ
  • 貪欲さ(欲張り/最長マッチと,控えめ/最短マッチ)
    • 欲張りなマッチング(最長マッチ)
    • 控えめなマッチング(最短マッチ,非欲張り)
  • 行の概念
    • ^と$
    • \Aと\Z,\z
  • モードと,修飾子(モード修飾子,オプション)
    • 大文字と小文字を無視する
    • コメントを入れられるようにする
    • 単一行モード(「.」をすべての文字にマッチさせる)
    • 複数行モード(^と$を改行の前後にマッチさせる)
  • 丸括弧()の機能(グループ化とキャプチャ)
    • グループ化
    • キャプチャ(後方参照)
    • プログラミング言語における変数による参照
    • 名前付きキャプチャ
    • キャプチャしない括弧
  • 先読みと後読み
    • 先読み
    • 否定先読み
    • 後読み(戻り読み)
    • 否定後読み

第4章 処理系別ガイド

  • Ruby
  • Rubyと正規表現
  • サポートされるメタキャラクタ
  • Regexpクラス
  • Stringクラス
  • MatchDataクラス
  • 正規表現関係の特殊変数
  • 文字列リテラルのメタキャラクタ
  • 日本語の扱い
  • Perl
  • Perlと正規表現
  • サポートされるメタキャラクタ
  • パターンマッチングを行う(パターンマッチ演算子) m/●●●/
  • マッチした箇所を別の文字列に置換する(置換演算子) s/●●●/●●●/
  • 文字を変換する(変換演算子) tr/●●●/●●●/
  • パターンを区切りとして文字列を分割する(文字列分割) split
  • 正規表現関係の特殊変数
  • 正規表現オペランド
  • 文字列リテラルのメタキャラクタ
  • 日本語の扱い
  • PHP
  • PHPと正規表現
  • サポートされるメタキャラクタ(PCRE関数)
  • PCRE関数(Perl互換の正規表現)
  • 文字列リテラルのメタキャラクタ
  • 日本語の扱い
  • JavaScript
  • JavaScriptと正規表現
  • サポートされるメタキャラクタ
  • RegExpオブジェクト
  • Stringオブジェクト
  • 文字列リテラルのメタキャラクタ
  • Java
  • Javaと正規表現
  • サポートされるメタキャラクタ
  • java.util.regex.Patternクラス
  • java.util.regex.Matcherクラス
  • java.lang.Stringクラス
  • java.util.regex.PatternSyntaxExceptionクラス
  • 検索の例
  • 置換の例
  • 文字列分割の例
  • 文字列リテラルのメタキャラクタ
  • 日本語の扱い
  • コマンドラインツール
  • grep
  • sed

第5章 正規表現パターンレシピ

  • 正規表現レシピの使い方
  • 英文中の単語にマッチ
  • 英文中の名詞にマッチ
  • HTMLタグにマッチ
  • HTML文書内の特定のタグの要素を取り出す
  • 郵便番号にマッチ
  • 電話番号にマッチ
  • HTTPのURLにマッチ
  • メールアドレスにマッチ
  • IPアドレスにマッチ
  • 整数値にマッチ
  • 10進数値にマッチ
  • 16進数値にマッチ
  • パーセント値にマッチ
  • 偶数値にマッチ
  • 奇数値にマッチ
  • ,(カンマ)区切り付きの数字にマッチ
  • 2015/10/4のような日付にマッチ
  • 18:30:00のような24時間制の時刻にマッチ
  • 2015/10/4 18:30:00のような日時にマッチ
  • ISO 8601の日時形式にマッチ
  • 脆弱なパスワードにマッチ
  • ファイル名にマッチ
  • ファイルパスにマッチ
  • ファイル名の各要素を取り出す
  • 空行にマッチ
  • 空行以外の行にマッチ

第6章 プチプログラム

  • 標準入力からのパターン検索【Ruby】【Perl】
  • 置換フィルタ【Ruby】【Perl】
  • 入力チェックを行う【Ruby】【Perl】【PHP】【Java】【JavaScript】
  • 改行コードを統一する【Ruby】【Perl】【PHP】【Java】【JavaScript】
  • 改行コードを
    に変換する【Ruby】【Perl】【PHP】【Java】【JavaScript】
  • 半角空白を に変換する【Ruby】【Perl】【PHP】【Java】【JavaScript】
  • URLをHTMLのハイパーリンクにする【Ruby】【Perl】【PHP】【Java】【JavaScript】
  • メールアドレスをHTMLのハイパーリンクにする【Ruby】【Perl】【PHP】【Java】【JavaScript】
  • HTML特殊文字をエスケープする【Ruby】【Perl】【PHP】【Java】【JavaScript】
  • テキストをHTMLに変換する【Ruby】【Perl】【PHP】【Java】【JavaScript】
  • 定型文書の差し込み出力(テンプレートエンジン)【Ruby】【Perl】【PHP】【Java】【JavaScript】
  • 数字に3桁区切りの,(カンマ)を付ける【Ruby】【Perl】【PHP】【Java】【JavaScript】