InDesign CS3 正規表現一覧

2008-05-27 市川せうぞー


 

InDesign CS3の正規表現一覧をまとめてみました。オンラインヘルプよりもちゃんとしてます。間違え、漏れなど見つけた方はご一報ください。

▼文字を表すもの

正規表現 意味 InDesign拡張 検索のみ InDesignワイルドカード 用例・備考
文字 リテラル
 
 
  文字そのものを表す。ABC→ABC
. 任意の1文字
 
^? 改行文字を含まない
\t タブ文字
 
 
^t  
\r 改行文字
 
 
^p  
\n 強制改行
 
^n shift+return
\d 数字
 
^9 [0-9]と同じ
\D 数字以外の文字
 
  [^0-9]と同じ(改行文字を含む)
\s ホワイトスペース
 
^w [ \t\r\n]と同じ。全角スペースを含めたいときは「全角半角を区別」がONにするか、素直に[ \s]とする。EMスペースなどにはマッチしない。
\S スペース以外の文字
 
  [^ \t\r\n]と同じ。
\w 任意の単語文字
 
  [0-9A-Za-z_]と同じ
\W 単語文字以外の文字
 
  [^0-9A-Za-z_]と同じ
\u 任意の大文字
 
  [A-Z]と同じ
\U 大文字以外の文字
 
  [^A-Z]と同じ
\l 任意の小文字
 
  [a-z]と同じ
\L 小文字以外の文字
 
  [^a-z]と同じ
[\l\u] 欧文アルファベット文字
 
^$ [A-Za-z]と同じ
\K 漢字
 
^K  基本的にCJK統合漢字領域を指すようだ。CJK統合漢字拡張[AB]にも含まれるものがあるが、完全ではない。(精神衛生を考慮して)コードポイントを指定して書きたいなら[一-龠]とする(「一:U+4E00」「龠:U+9FA0」)。間違ってもSJISの呪い([亜-煕])を使わないように。
\\ (文字)バックスラッシュ
 
 
\ 一般的に正規表現では、文字前に置いた\は次の文字を表します(\を無視します)。「\あ」は「あ」を表します。
\^ (文字)カレット
 
 
^^  
¥x{0024}  
 
 
  InDesign CS3(5.0.2)では文字「$」が「\$」でマッチしない(バグ)。文字「$」を表すためにUnicode表現が必要。
\. (文字)ピリオド
 
 
   
\( (文字)始め括弧
 
 
(  
\) (文字)終わり括弧
 
 
)  
\{ (文字)始め中括弧
 
 
{  
\} (文字)終わり中括弧
 
 
}  
\[ (文字)始めかぎ括弧
 
 
[  
\] (文字)終わりかぎ括弧
 
 
]  
\~ (文字)チルド
 
 
~  
\x{hex-num} コードポイントhex-num(16進数)の文字
 
<hex-num> 文字「あ」は「\x{3042}」。ASCII文字のみ\xnumでも表せる(文字「A」は「\x41」)
\oct-num コードポイントoct-num(8進数)の文字
 
  数字の「1」は「¥031」。アルファベットの「A」はなぜか「¥0101」(InDesign CS3(5.0.2)バグ)。
[[:alnum:]] 任意の英数字
 
  [[:alpha:]] + [[:digit:]]と同じ。以下POSIXブラケット表現、ロケールに依存。[[:^alnum:]]で否定集合を表す。
[[:alpha:]] 任意のアルファベット文字
 
  [[:lower:]] + [[:upper:]]と同じ。[A-Za-z]のアルファベットおよびその字形集合を含む。
[[:blank:]] 任意の空白文字
 
  半角スペースとタブにのみマッチ。通常は[ \t]と同じ。EMスペースなどにはマッチしない。
[[:cntrl:]] 任意の制御文字
 
  [\x00-\x1F\x7F]と同じ。\x7FはDEL。InDesignではいくつかの制御文字が、「改ページ」や「自動ページ番号」「セクションマーカー」などに割り振られている。
[[:digit:]] 任意の数字
 
  [0-9]の数字およびその字形集合と同じ。
[[:graph:]] 印字可能かつ表示可能な任意のASCII文字
 
  [!-~]とその字形集合と同じ。(スペースは印字可能だが表示可能ではない)
[[:lower:]] 任意のアルファベット小文字
 
  [a-z]とその字形集合と同じ。
[[:print:]] 任意の印刷可能文字(ASCII内)
 
  [ -~]とその字形集合と同じ。(スペースを含むがタブは含まない)
[[:punct:]] 任意の記号文字(ASCII内)
 
  パンクチュエーション文字。[!-/:-@\[-`{-~]とその字形集合と同じ。
[[:space:]] 空白文字、タブ、改行、水平タブ、給紙、キャリッジリターン、空白
 
  「全角半角の区別」をオフにしなければ、全角スペースは含まない。
[[:unicode:]] コードが255より大きい任意の文字
 
  広幅特徴を持つクラスのみに適用(※これについては、ちょっとよくわからない)
[[:upper:]] 任意のアルファベット大文字
 
  [A-Z]とその字形集合と同じ。
[[:word:]]    
 
  [[:alnum:]]とアンダーバー
[[:xdigit:]] 0~9、a~fおよびA~Fの任意の16進を構成できる数字
 
  [0-9A-Fa-f]とその字形集合と同じ。
[[=a=]] 特定の文字の字形セット
 
  a、à、á、â、ã、ä、å、A、À、Á、Â、Ã、Ä、Åなどにマッチする。コードポイントが255以上の文字では使えない。[[=あ=]]などとしても丸付きの「あ」はマッチしない。
~" 半角二重引用符
 
^"  
~{ 左二重引用符
 
^{  
~} 右二重引用符
 
^}  
~' 半角一重引用符
 
^'  
~[ 左引用符
 
^[  
~] 右引用符
 
^]  
~2 著作権記号
 
^2  
~e 省略記号
 
^e  
~7 段落記号
 
^7  
~r 登録商標記号
 
^r  
~6 セクション記号
 
^6  
~d 商標記号
 
^d  
~# 任意のページ番号
 
^#  
~N 現在のページ番号
 
^N  
~X 次ページ番号
 
^X  
~V 前ページ番号
 
^V  
~v 任意の変数
^v  
~x セクションマーカー
 
^x  
~a アンカー付きオブジェクトマーカー
^a  
~F 脚注参照マーカー
^F  
~I 索引マーカー
^I  
~8 ビュレット
 
^8  
~5 中点
 
^5  
~_ EMダッシュ
 
^_  
~= ENダッシュ
 
^=  
~- 任意ハイフン
 
^-  
~~ 分散禁止ハイフン
 
^~  
~( 全角スペース
 
^(  
~m EMスペース
 
^m  
~> ENスペース
 
^>  
~3 1/3スペース
 
^3  
~4 1/4スペース
 
^4  
~% 1/6スペース
 
^%  
~f フラッシュスペース
 
^f  
~| 極細スペース
 
^|  
~s 分散禁止スペース
 
^s  
~S 分離禁止スペース(固定幅)
 
^S  
~< 細いスペース
 
^<  
~/ 数字の間隔
 
^/  
~. 句読点等の間隔
 
^.  
~c クリップボードの内容、書式設定あり
 
^c 置換フィールドのみ有効
~C クリップボードの内容、書式設定なし
 
^C 置換フィールドのみ有効
~b 標準強制改行
 
^b  
~M 改段
 
^M  
~R 改フレーム
 
^R  
~P 改ページ
 
^P  
~L 奇数改ページ
 
^L  
~E 偶数改ページ
 
^E  
~a 任意の改行
 
^j  
~y 右インデントタブ
 
^y  
~i 「ここまでインデント」文字
 
^i  
~h 先頭文字スタイルの終了文字
 
^h  
~k 結合なし
 
^k  
~Y (変数)ランニングヘッダ(段落スタイル)
 
^Y  
~Z (変数)ランニングヘッダ(文字スタイル)
 
^Z  
~u (変数)カスタムテキスト
 
^u  
~T (変数)最終ページ番号
 
^T  
~H (変数)章番号
 
^H  
~S (変数)作成日
 
^S  
~o (変数)修正日
 
^o  
~D (変数)出力日
 
^D  
~l(小文字のL) (変数)ファイル名
 
^l(小文字のL)  

▼位置を表すもの(アンカー)、後読み/先読み

正規表現 意味 InDesign拡張 検索のみ InDesignワイルドカード 用例・備考
^ (位置)段落の始まり
 
   
$ (位置)段落の終わり
 
   
\A (位置)ストーリーの始まり
 
  このメタキャラクタは「^」のように単独ではマッチしない。ストーリーの始まりが「abcabc」であるとき、「\Aabc」は最初の「abc」だけでなく、後ろの「abc」にもマッチする(これはおそらくInDesign CS3でのバグ)。現状での回避方法は「\A^abc」とすること。
\Z (位置)ストーリーの終わり
 
  このメタキャラクタは「$」のように単独ではマッチしない。ストーリーの終わりが「abcabc」または「abcabc\r」であるとき、「abc\Z」は最後の「abc」にマッチする。ストーリーの最後に改行文字が入っていても、それは無視される。
\z (位置)ストーリーの終わり
 
  このメタキャラクタは「$」のように単独ではマッチしない。ストーリーの終わりが「abcabc」であるとき、「abc\z」は最後の「abc」にマッチする。ストーリーの終わりが「abcabc\r」(改行で終わっている)であるとき、「abc\z」はマッチしない(「abc\r\z」と書く必要がある)。
\< (位置)単語の始まり
 
  日本語環境の場合、「英数字」と「漢字・ひらがな・カタカナ」の境に単語境界が存在する。また、検索開始時のカーソル位置が、強制的に単語境界に設定されてしまうため、単語中にカーソルがあるときは、注意すること。以下\bも同じ。
\> (位置)単語の終わり
 
   
\b (位置)単語の境界
 
   
\B (位置)単語の境界以外
 
   
\G (位置)最後のマッチ位置
 
  通常の正規表現では「\G」は最後のマッチ位置を表すが、InDesignでは検索開始時のカーソル位置にあたる。「abc abc」という文字列の先頭にカーソルがある時、「\Gabc」でマッチするのは最初のカーソル直後にある「abc」のみ。ストーリーの最初にマッチしてしまうのは、おそらく不具合。
(?<= ) 肯定後読み
 
  たとえば、正規表現「(?<=東京都)港区」と書いた時、「東京都港区」の中の「港区」にはマッチするが、「名古屋市港区」には目もくれない。
(?<! ) 否定後読み
 
  たとえば、正規表現「(?<!東京都)港区」と書いた時、「東京都港区」にだけマッチしない。「名古屋市港区」や「大阪市港区」の中の「港区」にはマッチする。
(?= ) 肯定先読み
 
  たとえば、正規表現「東京都(?=港区)」と書いた時、「東京都港区」の中の「東京都」にはマッチするが、「東京都練馬区」や「東京都杉並区」には目もくれない。
(?! ) 否定先読み
 
  「たとえば、正規表現東京都(?!港区)」と書いた時、「東京都港区」にだけマッチしない。「東京都練馬区」や「東京都杉並区」の中の「東京都」にはマッチする。

▼オプション

正規表現 意味 InDesign拡張 検索のみ InDesignワイルドカード 用例・備考
(?i) 大文字と小文字を区別しない-オン
 
  「(?i)abc」と書くと、「abc」にも「ABC」にも「aBc」にもマッチする。
(?-i) 大文字と小文字を区別しない-オフ
 
  デフォルト。たとえば、正規表現「(?i)abc (?-i)abc」と書いたとき、「abc abc」にも「ABC abc」にも「aBc abc」にもマッチする。
(?m) 複数行-オン
 
  デフォルト。「^」と「$」を強制段落(\r)で区切られたそれぞれの行の「行頭」と「行末」にマッチする。マルチラインモード。
(?-m) 複数行-オフ
 
  検索範囲が「選択範囲」の時、選択範囲の文字列の最初文字の前に「^」がマッチし、最後の文字の後ろに「$」がマッチする。検索範囲が「ドキュメント」の時、カーソル位置とストーリーの最初の文字の前に「^」がマッチし、最後の文字の後ろに「$」がマッチする。
(?s) 単一行-オン
 
   「.」が改行文字(\r)を含むようになる。「^.+」と書けば、検索開始位置からストーリーすべてにマッチする。シングルラインモード。
(?-s) 単一行-オフ
 
  デフォルト。「.」は改行文字(\r)を含まない。
(?x) スペース文字を無視-オン
 
  正規表現中に書かれたスペース文字を無視する。正規表現「(?x)ab c」は文字列「abc」にマッチする。
(?-x) スペース文字を無視-オフ
 
  デフォルト。
¥Q〜¥E リテラルテキストの範囲
 
  たとえば、テキストフレームの中に「[^a(b)c]」という文字列があり、この文字列にマッチさせたい時、通常はバックスラッシュでエスケープして「¥[¥^a¥(b¥)c¥]」などと書かなければならない。しかし、つまようじが多くて見づらいという人のために、「¥Q[^a(b)c]¥E」と書くことができる。つまり、「¥Q〜¥E」の中はリテラルとして扱われる。

▼繰り返し

正規表現 意味 InDesign拡張 検索のみ InDesignワイルドカード 用例・備考
? 直前の文字が0回または1回
 
  たとえば、正規表現「https?://」と書いた時、「http://」と「https://」マッチする。また、正規表現「Mac(intosh)?」と書いた時、「Macintosh」と「Mac」にマッチする。
* 直前の文字が0回以上
 
  たとえば、正規表現「^\s*\r」と書いた時、空行とスペースのみが0個以上の行がマッチする。
+ 直前の文字が1回以上
 
  たとえば、正規表現「coo+l!」と書いた時、「cool!」にも「cooooool!」にも「cooooooooooooool!」にもマッチする。あまりクールな例ではないのだが...
?? 直前の文字が0回または1回(最小一致)
 
  たとえば、文字列「hogehoge」に対して、正規表現「hoge(hoge)?」と書けば「hogehoge」がマッチするが、正規表現「hoge(hoge)??」と書けば最初の「hoge」だけがマッチする。とても控えめ(わたしみたい)な清楚な奴だけに、あまり使われない。
*? 直前の文字が0回以上(最小一致)
 
  たとえば、CSVの二重引用符(空要素もありうる)ような文字列「"hogehoge"」に対して、★マークを入れるような場合、検索フィールドに正規表現「"(.*?)"」と書き、置換フィールドに「”★$1"」とすれば文字列の先頭に「★」がつけられる。
+? 直前の文字が1回以上(最小一致)
 
  たとえば、文字列「<p><a href="http://www.seuzo.jp/">せうぞー</a></p>」に対して、正規表現「<.+>」と書くと文字列すべてにマッチしてしまう。最初のタグ「<p>」にマッチさせたい場合は「<[^>]+>」または「<.+?>」と書けばよい。非欲張りマッチ、最小マッチ。
{n} 直前の文字が少なくともn回
 
  このとき、必ずしもn回かっきりでないことに注意。たとえば「123456」という数字に対して「\d{2}」とすると、最初の「12」にマッチする。すなわちこの場合、「\d{2}」が常に2桁の数値を表しているわけではない。
{n,} 直前の文字がn回以上
 
   
{n,m} 直前の文字がn回以上m回以内
 
  必ずしもm回以内に納まっているものだけがマッチするわけではない。直前の文字がm回以上あったとしても、少なくともm回まではマッチする。

▼文字クラス、グループ、選択

正規表現 意味 InDesign拡張 検索のみ InDesignワイルドカード 用例・備考
[ ] 文字クラス
 
  たとえば、正規表現「[abc]」と書いた時、文字「a」または「b」または「c」にマッチする。また、「[a-c]」と範囲を指定できる(この時の範囲はUnicode順)。さらに「[^abc]」は「abc」以外の文字にマッチする。この時、気をつけなければならないのは、[^abc]は改行文字も含んでしまうこと。「.」が改行文字を含まないことに慣れてしまうと、ついついやってしまいがちなミス。
( ) グループマーキング
 
  グループを使用する目的は主に2つ。ひとつは検索文字列をキャプチャして、置換文字の「$1〜$9」で参照させること。もうひとつは、選択「|」を使用するときに選択境界をはっきりさせることである。たとえば、タブ区切りの列の順序を入れ替えたい時、文字列「hoge\tfuga\tpuyo」に対して、検索フィールドに正規表現「(.+?)\t(.+?)\t(.+?)\r」と書き、置換フィールドに「$3\t$2\t$1\r」と書けば、結果は「puyo\tfuga\thoge」となる。
(?: ) グループのキャプチャをしない
 
  文字列をグループ化するとき、グループ化された文字列をバッファにキャプチャしない。たとえば、正規表現「(.+?)\t(?:.+?)\t(.+?)\r」と書いた時、3番目のグループは「$2」で参照される。
$0 マッチした文字列すべて
 
 
  置換フィールドでのみ使用可能。グループ化の有無にかかわらず、マッチした文字列すべてを参照できる。
$1〜$9 グループ化された文字列(左から1~9)
 
 
  置換フィールドでのみ使用可能。文字列「いろはにほへとちり」に対して、正規表現(検索フィールド)に「^(.)(.)(.)(.)(.)(.)(.)(.)(.)」と書き、置換フィールドに「$9$8$7$6$5$4$3$2$1」と書けば、置換結果は「りちとへほにはろい」になる。番号は左から順に1〜9番が振られ、グループが入れ子になっているときは起こし括弧の順となる。
\1〜\9 検索フィールドでのグループの再利用
 
  検索フィールド内で、正規表現「(hoge)\1」と書いた時、文字列「hogehoge」にマッチする。\1はマッチ文字列そのものであり、グループ内に書かれた正規表現が再度展開するわけではない。つまり、文字列「hoge1hoge2」に対して、正規表現「(hoge\d)\1」はマッチしない。この時、文字列「hoge1hoge1」にはマッチする。
| 選択
 
  たとえば、正規表現「hoge|fuga」は、「hoge」と「fuga」にマッチする。1月〜12月は「(1[0-2]|[1-9])月」と表現できる。