目次

監訳者まえがき
はじめに

1章  正規表現とは
	1.1	問題解決の実例
	1.2	言語としての正規表現
		1.2.1	ファイル名の喩え
		1.2.2	言語の喩え
	1.3	正規表現の考え方
		1.3.1	テキストファイルの検索:egrep
	1.4	egrepのメタ文字
		1.4.1	行の先頭と末尾
		1.4.2	文字クラス
		1.4.3	否定文字クラス
		1.4.4	任意の文字とマッチさせる―ドット
		1.4.5	選択
		1.4.6	単語境界
		1.4.7	これまでのまとめ
		1.4.8	オプション要素
		1.4.9	その他の制御文字:繰り返し
		1.4.10	大文字小文字の違いを無視する
		1.4.11	丸括弧と前方参照
		1.4.12	エスケープ
	1.5	基礎を発展させる
		1.5.1	言語の多様性
		1.5.2	正規表現の目的
		1.5.3	いくつかの追加例
		1.5.4	正規表現の用語
		1.5.5	環境改善
		1.5.6	まとめ
	1.6	筆者の所見
	
2章  基本的な問題例
	2.1	例題について
		2.1.1	Perlの簡単な解説
	2.2	正規表現によるテキストのマッチ
		2.2.1	もっと実際に即した例
		2.2.2	成功マッチの副作用
		2.2.3	絡み合った正規表現
		2.2.4	ひと休み
	2.3	正規表現によるテキスト整形
		2.3.1	自動編集
		2.3.2	ちょっとしたメールユーティリティ
		2.3.3	重複単語の問題
	
3章  正規表現の機能と特性の概要
	3.1	正規表現の概要
		3.1.1	grepの世界
		3.1.2	変化の時代
	3.2	見かけ上の特徴
		3.2.1	POSIX
	3.3	正規表現の扱いと注意
		3.3.1	正規表現を認識する
		3.3.2	マッチしたテキストの処理
		3.3.3	他のツールの例
		3.3.4	正規表現の扱い方と注意点:まとめ
	3.4	エンジンとクロームフィニッシュ
		3.4.1	クロームメッキと外観
		3.4.2	エンジンとドライバー
	3.5	一般的なメタ文字
		3.5.1	文字の略記法
		3.5.2	正規表現を表わす文字列
		3.5.3	クラスの略記法、ドット、文字クラス
		3.5.4	位置指定
		3.5.5	グループ化と参照
		3.5.6	繰り返し制御文字
		3.5.7	選択
	3.6	上級者編への指針
		3.6.1	ツール別情報

4章  正規表現の処理メカニズム
	4.1	エンジン始動!
		4.1.1	2種類のエンジン
		4.1.2	新しい基準
		4.1.3	正規表現エンジンの種類
		4.1.4	ふりだしにもどる
	4.2	マッチの基本原則
		4.2.1	例題について
		4.2.2	第一原則:最初のマッチが優先される
		4.2.3	トランスミッションとシフト
		4.2.4	エンジン部品
		4.2.5	第二原則:一部のメタ文字は欲張りである
	4.3	正規表現制御型とテキスト制御型
		4.3.1	NFAエンジン:正規表現制御型
		4.3.2	DFAエンジン:テキスト制御型
		4.3.3	解き明かされる正体
	4.4	バックトラック
		4.4.1	道しるべの喩え
		4.4.2	バックトラックに関する2つの重要事項
		4.4.3	記憶されたステート
		4.4.4	バックトラックと貪欲ぶり
	4.5	貪欲さについてもう少し学ぶ
		4.5.1	貪欲さによる問題
		4.5.2	複数文字からなる「クォート」
		4.5.3	怠け者?
		4.5.4	貪欲さは常にマッチを優先させる
		4.5.5	選択は貪欲か?
		4.5.6	非欲張り型の選択に用いる
		4.5.7	欲張り型選択の概要
		4.5.8	文字クラス 対 選択
	4.6	NFA、DFAおよびPOSIX
		4.6.1	最長最左
		4.6.2	POSIXと最長最左規則
		4.6.3	真の最左
		4.6.4	スピードと効率
		4.6.5	DFAとNFAの比較
		4.6.6	実装し易さの違い
	4.7	正規表現の実践技法
		4.7.1	鍵となる条件
		4.7.2	厳密に考えよ
		4.7.3	困難な問題と不可能な問題
		4.7.4	不要なマッチに注意する
		4.7.5	区切られたテキストのマッチ
		4.7.6	自分のデータを把握して仮定を立てる
		4.7.7	欲張り型の追加例
	4.8	まとめ
		4.8.1	マッチメカニズムのまとめ
		4.8.2	マッチメカニズムの実際上の効果
	
5章  正規表現を工夫する
	5.1	興味深い例題
		5.1.1	簡単な変更―好手を先に
		5.1.2	一歩進んだ方法―貪欲さを局所化する
		5.1.3	して、その正体やいかに
	5.2	バックトラックの全体像
		5.2.1	さらに作業を続けるPOSIX NFA
		5.2.2	マッチ不成立で行なわれる作業
		5.2.3	もっと条件を限定する
		5.2.4	選択は高くつくことがある
		5.2.5	過度のバックトラック
		5.2.6	丸括弧の影響
	5.3	内部最適化
		5.3.1	先頭文字の識別
		5.3.2	固定文字列のチェック
		5.3.3	単純繰り返し
		5.3.4	少ない繰り返しは不要
		5.3.5	文字列長認識
		5.3.6	マッチ認識
		5.3.7	必要性の認識
		5.3.8	文字列/行アンカー
		5.3.9	コンパイルキャッシング
	5.4	エンジンの種類をテストする
		5.4.1	NFAとDFAの基本テスト
		5.4.2	従来型NFAかPOSIX NFAかを調べるテスト
	5.5	ループ展開
		5.5.1	方法1:これまでの経験に基づいて正規表現を構築する
		5.5.2	本格的な「ループ展開」パターン
		5.5.3	方法2:高次元の視点で見る方法
		5.5.4	方法3:クォート付きのインターネットホスト名
		5.5.5	考察
	5.6	Cコメントの展開
		5.6.1	頭が痛くなる正規表現
		5.6.2	詰めの甘い考え方
		5.6.3	Cコメント表現のループ展開
	5.7	スムーズに流れる正規表現
		5.7.1	マッチするように導くには
		5.7.2	よく制御された正規表現は速い
		5.7.3	まとめ
	5.8	頭を使え!
		5.8.1	最適化の紆余曲折

6章  ツール別情報
	6.1	混乱状態
		6.1.1	grepのような単純なものでさえ...
		6.1.2	本章の内容
	6.2	awk
		6.2.1	awk正規表現における特性の違い
		6.2.2	awk正規表現の関数と演算子
	6.3	Tcl
		6.3.1	Tclの正規表現オペランド
		6.3.2	Tclの正規表現を使う
		6.3.3	Tclにおける正規表現の最適化
	6.4	GNU Emacs
		6.4.1	正規表現としてのEmacs文字列
		6.4.2	Emacs正規表現の特性
		6.4.3	Emacsのマッチ結果
		6.4.4	Emacsでのベンチマーク
		6.4.5	Emacs正規表現の最適化

7章  Perlの正規表現
	7.1	Perl流プログラミング
		7.1.1	言語の一部としての正規表現
		7.1.2	Perlの最大の威力
		7.1.3	Perlの最大の弱点
		7.1.4	鶏と卵―Perl流
		7.1.5	導入例:CSVテキストの解析
		7.1.6	正規表現とPerl流プログラミング
		7.1.7	Perlの出現
	7.2	正規表現関連のPerl作法
		7.2.1	式のコンテキスト
		7.2.2	動的スコープと正規表現マッチの効果
		7.2.3	わかりやすくたとえると:透明シート
		7.2.4	動的スコープのより高度な応用例
		7.2.5	マッチによって影響を受ける特殊変数
		7.2.6	「ダブルクォート風処理」と変数展開
	7.3	Perl正規表現の特性
		7.3.1	繰り返し制御文字―欲張り型と怠け者型
		7.3.2	グループ化
		7.3.3	文字列アンカー
		7.3.4	複数マッチアンカー
		7.3.5	単語アンカー
		7.3.6	便利な略記法とその他の記法
		7.3.7	文字クラス
		7.3.8	\ Qとその仲間を用いた修飾:本当の正体
		7.3.9	第2クラスメタ文字
	7.4	マッチ演算子
		7.4.1	マッチオペランドデリミタ
		7.4.2	マッチ修飾子
		7.4.3	マッチ対象オペランドの指定
		7.4.4	マッチ演算子によるその他の副作用
		7.4.5	マッチ演算子の戻り値
		7.4.6	マッチ演算子に対する外部からの影響
	7.5	置換演算子
		7.5.1	置換オペランド
		7.5.2	修飾子 /e
		7.5.3	コンテキストと戻り値
		7.5.4	/gを無とマッチする正規表現と併用する
	7.6	split演算子
		7.6.1	基本知識
		7.6.2	splitの高度な利用法
		7.6.3	splitマッチオペランドの高度な利用
		7.6.4	スカラーコンテキストでのsplit
		7.6.5	splitのマッチオペランドの中で格納型丸括弧を使う
	7.7	Perlにおける効率の問題
		7.7.1	「やり方は一つだけではない」
		7.7.2	正規表現のコンパイル、修飾子/o、および効率性
		7.7.3	協調性に欠ける$&とその仲間
		7.7.4	修飾子 / i の効率面における負担
		7.7.5	置換効率の問題
		7.7.6	ベンチマーク
		7.7.7	正規表現のデバッグ情報
		7.7.8	study関数
	7.8	総仕上げ
		7.8.1	先頭および後続の空白を取り除く
		7.8.2	数字にコンマを加える
		7.8.3	Cコメントを取り除く
		7.8.4	電子メールアドレスをマッチする
	7.9	結び
		7.9.1	Perl4ノート

付録 A	オンライン情報
付録 B	電子メール用正規表現プログラム
索引


書籍についてのお問い合わせは以下までお願いします。

株式会社オライリー・ジャパン

〒160-0003 東京都新宿区本塩町7番地6 四谷ワイズビル
phone:03-3356-5227 fax:03-3356-5261 e-mail:japan@oreilly.com


書籍の購入方法トップページへ戻る