正規表現パズル

 サイト設立 2006年8月3日
  最終更新日 2014年3月1日


Jeffrey E. F. Friedl氏の著書[詳説 正規表現]の内容をふまえて正規表現パズルを解くサイトです。
EmEditorの正規表現が対象です。


CodeZineの執筆記事

正規表現の入門1 基礎的なメタ文字
正規表現の入門2 難しいメタ文字
正規表現の問題集1 (基本編)
正規表現の問題集2 (応用編)


1 基礎編

1-1 キルヒホッフの実証論
1-2 ブール代数
1-3 正則表現
1-4 ふくろう本
1-5 EmEditorの正規表現


2 基本編

2-1 指定文字列を含む行を検索
2-2 指定文字列を含まない行を検索
2-3 整数をカンマ区切りに置換
2-4 URLの/を補完
2-5 フルパスからディレクトリパスを取得(置換編)
2-6 フルパスからディレクトリパスを取得(検索編)
2-7 フルパスからファイル名を取得(置換編)
2-8 フルパスからファイル名を取得(検索編)
2-9 指定した拡張子以外のファイルを取得
2-10 行頭と行末のダブルコートを補完
2-11 指定文字の指定番目の間の文字列を取得
2-12 指定文字を挿入
2-13 文字列を含む含まないでの分岐を模倣
2-14 指定文字の指定番目までの文字列を検索
2-15 三銃士を検索
2-16 量指定子でn回以下を指定
2-17 指定位置に文字を挿入
2-18 文字数を条件とした置換
2-19 文字数に応じた指定文字を置換
2-20 最後の指定文字から検索
2-21 /で囲まれた最後の文字列を検索
2-22 文字列ABCで囲まれた最後の文字列を検索
2-23 文字列が2個以上ある行を検索
2-24 行頭から文字がN回現れるまでマッチ
2-25 行頭から文字列がN回現れるまでマッチ
2-26 指定複数文字列のみの行を検索(共通文字なし)
2-27 指定複数文字列のみでない行を検索(共通文字なし)
2-28 指定複数文字列のみの行を検索(共通文字あり)その1
2-29 指定複数文字列のみの行を検索(共通文字あり)その2
2-30 指定複数文字列のみの行を検索(共通文字あり)その3
2-31 指定複数文字列のみでない行を検索(共通文字あり)
2-32 共通文字に注目した正規表現の変形
2-33 月と日の前ゼロを補完
2-34 連続文字5文字ごとにマッチ
2-35 次に文字列ABCがある、文字X以外を検索
2-36 小数第4位以下と小数第3位の0を削除
2-37 2個以上連続するAの、最後のA以外を検索
2-38 {0,1}と選択での分配法則
2-39 1文字の有無が違う論理和の変形
2-40 連続した数字の4桁ごとにマッチ
2-41 hh24形式の時間(0から23)を検索
2-42 dd形式の日(1から31)を検索
2-43 カンマに隣接した連続したAを検索


3 応用編

3-1 同じ文字列を検索
3-2 整数にマッチ
3-3 数値にマッチその1
3-4 数値にマッチその2
3-5 IPの前ゼロを削除
3-6 IP(0以上255以下の整数)を検索
3-7 最後の括弧の中身を取得(置換編)
3-8 最後の括弧の中身を取得(検索編)
3-9 最初の括弧の中身を取得
3-10 全ての括弧の中身を取得
3-11 任意の連続した文字列を検索
3-12 範囲コメントでない部分を検索
3-13 行コメントでない部分を検索
3-14 カンマ区切りの金額を検索
3-15 演算子の前後の空白をチェック
3-16 指定文字がn回
3-17 指定文字がn回以外
3-18 指定文字列がn回
3-19 指定文字列がn回以外
3-20 否定先読みで条件チェック
3-21 可変長の戻り読みを模倣
3-22 選択での優先順位の変更
3-23 条件を満たすファイル名と、部分マッチ
3-24 指定文字列内の、指定文字を検索その1
3-25 指定文字列内の、指定文字を検索その2
3-26 指定文字列内の、指定文字を検索その3
3-27 文字クラスの集合演算(和集合)を模倣
3-28 文字クラスの集合演算(共通集合)を模倣
3-29 文字クラスの集合演算(差集合)を模倣
3-30 文字クラスと量指定子と否定戻り読み
3-31 5回以上連続する文字Aの最初の3個を検索
3-32 置換を使って、同一文字は最後の文字のみを残す
3-33 文字数固定で回文な行を検索
3-34 否定先読みで後方参照を使用


4 発展編

4-1 数値が4の倍数か調べる
4-2 empテーブルに対するdelete文を検索
4-3 日付を検索
4-4 指定文字がn回以上m回以下
4-5 複数文字がn回以上m回以下
4-6 最小マッチ(ものぐさマッチ)を模倣
4-7 よくばりマッチ(強欲マッチ)を模倣
4-8 指定文字列がn回以上m回以下
4-9 複数文字列がn回以上m回以下
4-10 aが偶数個でbが奇数個の文字列
4-11 指定文字列がn回以上m回以下(重複を許可)
4-12 指定文字列が3の倍数回出現
4-13 文字列を含む含まないでの論理演算
4-14 ブール代数の分配法則
4-15 アトミックなグループを模倣
4-16 文字列データを検索(VBのエスケープ方式)
4-17 文字列データでないカンマを検索(VBのエスケープ方式)
4-18 文字列データのカンマを検索(VBのエスケープ方式)
4-19 文字列データを検索(Cのエスケープ方式)
4-20 文字列データでないカンマを検索(Cのエスケープ方式)
4-21 文字列データのカンマを検索(Cのエスケープ方式)
4-22 ブール代数のドモルガンの法則その1
4-23 ブール代数のドモルガンの法則その2
4-24 少なくとも2つを含む行を検索
4-25 少なくとも1つを含む行を検索
4-26 HTMLのタグ内部を検索
4-27 HTMLのタグ外部を検索
4-28 直近のtrタグで囲まれた部分を検索
4-29 CSVのn番目のデータ区切りまでマッチその1
4-30 CSVのn番目のデータ区切りまでマッチその2
4-31 行末から左に数えて3番目のabcを検索
4-32 ABCのみの文字列で、それぞれ1回のみ出現する文字列


5 難問編

5-1 CSVのデータを検索(VBのエスケープ方式)
5-2 行末からペアを作成
5-3 最も内側の括弧の中身を検索
5-4 文字列のチェックその1
5-5 文字列のチェックその2
5-6 文字列のチェックその3
5-7 括弧でくくられてないカンマを検索
5-8 行単位での整形その1
5-9 行単位での整形その2
5-10 文字列の出現回数と出現順序を指定
5-11 項目数が3つの行を検索
5-12 コメント扱いでない文字を検索
5-13 文字列のチェックその4
5-14 同じ文字で、文字が挟まれてない行を検索
5-15 2文字以上の文字列で、文字が挟まれてない行を検索
5-16 Bが続くAが1個で、Bが続かないAが1個
5-17 スラッシュの前の最初の数字列以外を消去
5-18 優先順位を持った置換
5-19 否定戻り読みでドモルガンの法則
5-20 正規表現でブール代数の公式
5-21 場合分けにこだわった正規表現
5-22 正規表現で条件法
5-23 外側の括弧の中身を検索
5-24 置換を使ってCSVからデータ抽出
5-25 全称肯定命題と存在否定命題
5-26 入れ子な否定戻り読み


6 連続した置換編

6-1 連続した重複行を1行に置換
6-2 出現回数が2回目以降なら削除その1
6-3 出現回数が2回目以降なら削除その2
6-4 Aに挟まれたXをYに置換
6-5 IPアドレスの左に0埋め
6-6 AとBを1対1の対応で消去


7 鬼車編(Rubyとサクラエディタ)

7-1 Rubyの正規表現の使用例
7-2 サクラエディタの正規表現の使用例
7-3 鬼車の入門
7-4 田中哲スペシャルで2度書き防止
7-5 田中哲スペシャルで^[0-9]+$を模倣
7-6 括弧に囲まれたaを検索
7-7 括弧問題の準備1
7-8 括弧問題の準備2
7-9 行頭にある最初の擬似括弧の中身を検索
7-10 行頭にある最初の括弧の中身を検索
7-11 回文な行を検索(偶数文字限定)
7-12 回文な行を検索


8 Perl編

8-1 Perlの正規表現の使用例
8-2 動的正規表現構文
8-3 reverse関数(回文問題の準備)
8-4 回文問題
8-5 括弧問題(動的正規表現)
8-6 括弧問題(組み込みコード)
8-7 組み込みコードでマッチ情報の表示
8-8 組み込みコードで最長マッチの表示


9 .net編

9-1 可変長戻り読み
9-2 US郵便番号問題
9-3 可変長戻り読みで連立不等式
9-4 可変長戻り読みでsplit
9-5 文字クラスの集合演算(差集合)
9-6 空の選択
9-7 アトミックグループ
9-8 条件分岐(if then else)で先読みと戻り読みを使用
9-9 条件分岐(if then else)で括弧のキャプチャ有無を使用
9-10 括弧問題(平衡グループ)
9-11 OO4O仕様で整数部が0の小数の整数部の0を削除


10 Java編

10-1 Javaの正規表現の使用例
10-2 matches,replaceAll,replaceFirst
10-3 強欲な量指定子
10-4 文字クラスの集合演算(和集合)
10-5 文字クラスの集合演算(共通集合)
10-6 文字クラスの集合演算(差集合)
10-7 ?を使う可変長戻り読み
10-8 RegExp_Like(Replace,Substr,Instr,Count)(作成中)


11 PHP編

11-1 PHPの正規表現の使用例
11-2 括弧問題(田中哲スペシャル)


12 秀丸編

12-1 ヒットした扱いにするタグ指定


正規表現の豆知識

VC++とC#とVB.netとOracleとJavaとRubyでの正規表現の使用例
否定先読みと任意の組み合わせでの盲点
アトミックグループ内での最小マッチを模倣
選択は左に記述したのを優先するかの調査
分配法則による正規表現の変形(基本編)
分配法則による正規表現の変形(実践編)
論理和と論理積の優先順位
正規表現エンジンの調査(従来型NFA,POSIX NFA,DFA)


姉妹サイト

OracleSQLパズル
MySQLパズル
PostgreSQLパズル
DB2 SQLパズル
ブール代数パズル
Javaアルゴリズムパズル
C#のサンプル集
C++のサンプル集
SQLServerのSQLのサンプル集
JavaScriptのサンプル集


正規表現関連のリンク(日本語)

Perl正規表現雑技
正規表現メモ
正規表現探索の手法
正規表現(regular expression)入門
正規表現とNFA・DFA
鬼車の開発者のサイト
「正規表現」に無限のパワーを与える田中哲スペシャル
正規表現エンジンを作ろう:CodeZine
a geek


正規表現関連のリンク(英語)

Regular-Expressions.info
Regular Expression Matching Can Be Simple And Fast
正規表現オートマトン
Flagrant Badassery
Michael Ash's Regex Blog