DTPab

印刷やデザイン、アドビ製アプリやスクリプトなど、雑多な技術ブログ

InDesign CC2014から変更された正規表現?

原因(例えば正規表現エンジンが変わったとか)は何もわかりませんが、現象として確認できたので記事に起こしました。

概要

InDesign CS4〜CCまでと、CC2014以降で正規表現検索結果に違いが確認できました。
これはパネルから検索した結果もそうですし、正規表現スタイルでマッチする結果も違います。要するに同じ正規表現でもCC2014以前か以降かで結果が変わるということです。
これは特にデータのバージョンをまたぐ場合に致命的です。
これまでのInDesignから考えると、バグではなく、おそらくアナウンスのない仕様変更でしょう。

メタ文字|の挙動

気づいたのはパイプ|*1の挙動です。
ご存知の通り、A|Bと検索するとAかBにマッチするという正規表現です*2
このパイプ|が、InDesign CCまでか、CC2014以上かで検索マッチの結果に違いが出てしまうというのが今回の内容です。

CCまで

百聞は一見に如かずということで、これはCS4〜CCで動作する正規表現です。

f:id:uske_S:20200330212616p:plain
CS4〜CCまで有効な正規表現
図にある通り、正規表現はあああ)|)$です。正規表現スタイルで水色になるように設定しています。

  • あああ)
  • )$

この2つをマッチさせたいと思って、間にパイプ|を挟んでいるような格好です。

CC2014以降

このデータをCC2014以降で開くと、下図のようになります。

f:id:uske_S:20200330212906p:plain
CC2014以降
というわけでまったくマッチしなくなります

何が起きているか?

ここで下図のようなテキストを用意して、この正規表現で検索してみます。

f:id:uske_S:20200330213541p:plain
InDesign 2020ではピンクの部分にマッチする
そうするとこのピンクの文字列が検索マッチするのです。

パイプ|と行末を示す$の組み合わせの解釈が変わっている

というのが僕の仮説です。
この検索結果から、検索されている文字列は下記のように分解できます。

  • あああ)|)
  • $

これは行末$あああ)もしくはがあるかどうか、という検索になっていると推測できるわけです。
しかし、1行目の「とか)」の「)」にマッチしていない点を鑑みると、この仮説も違うかもしれません。どうやら冒頭の「あああ)」と「・とか)」が$でうまく検索できていないようです。

対処するには

詳しい原因はさておき、だいたい予測はつきました。パイプ|がかかる範囲を決めてあげればいいのです
具体的には下記のやりかたがあるでしょう。

  • (あああ))|()$)
  • (あああ)|)$)

このように適宜グループ参照してあげることで、$だけが弾き出されることなくきちんと検索できるようになります*3

まとめ

  • CCまでとCC2014以降でメタ文字の解釈結果がことなることがある (紹介したケース以外にもひょっとしたらあるかもしれない)
  • まずは|$の組み合わせに要注意
  • 適宜グループ参照してあげることで回避可能
  • バージョンまたいだら必ず差分やデジタル検版をやろう

他にもこんなところが違うっぽいとか情報送っていただけると嬉しいです。
以上、InDesignの正規表現のメタ文字の解釈がCC2014から変わっている話でした。

*1:より厳密には選言といいますが、あまり浸透していない言い方なのでこの記事では「パイプ」としました

*2:より厳密には、AにマッチしなければBにマッチする、となります。単純なORではありません

*3:後者の検索条件はものかのさんに試していただいた結果です。いつもご協力に感謝です!