原因(例えば正規表現エンジンが変わったとか)は何もわかりませんが、現象として確認できたので記事に起こしました。
概要
InDesign CS4〜CCまでと、CC2014以降で正規表現検索結果に違いが確認できました。
これはパネルから検索した結果もそうですし、正規表現スタイルでマッチする結果も違います。要するに同じ正規表現でもCC2014以前か以降かで結果が変わるということです。
これは特にデータのバージョンをまたぐ場合に致命的です。
これまでのInDesignから考えると、バグではなく、おそらくアナウンスのない仕様変更でしょう。
メタ文字|
の挙動
気づいたのはパイプ|
*1の挙動です。
ご存知の通り、A|B
と検索するとAかBにマッチするという正規表現です*2。
このパイプ|
が、InDesign CCまでか、CC2014以上かで検索マッチの結果に違いが出てしまうというのが今回の内容です。
CCまで
百聞は一見に如かずということで、これはCS4〜CCで動作する正規表現です。
図にある通り、正規表現はあああ)|)$
です。正規表現スタイルで水色になるように設定しています。
あああ)
)$
この2つをマッチさせたいと思って、間にパイプ|
を挟んでいるような格好です。
CC2014以降
このデータをCC2014以降で開くと、下図のようになります。 というわけでまったくマッチしなくなります。
何が起きているか?
ここで下図のようなテキストを用意して、この正規表現で検索してみます。 そうするとこのピンクの文字列が検索マッチするのです。
パイプ|
と行末を示す$
の組み合わせの解釈が変わっている?
というのが僕の仮説です。
この検索結果から、検索されている文字列は下記のように分解できます。
あああ)|)
$
これは行末$
にあああ)
もしくは)
があるかどうか、という検索になっていると推測できるわけです。
しかし、1行目の「とか)」の「)」にマッチしていない点を鑑みると、この仮説も違うかもしれません。どうやら冒頭の「あああ)」と「・とか)」が$
でうまく検索できていないようです。
対処するには
詳しい原因はさておき、だいたい予測はつきました。パイプ|
がかかる範囲を決めてあげればいいのです。
具体的には下記のやりかたがあるでしょう。
(あああ))|()$)
(あああ)|)$)
このように適宜グループ参照してあげることで、$
だけが弾き出されることなくきちんと検索できるようになります*3。
まとめ
- CCまでとCC2014以降でメタ文字の解釈結果がことなることがある (紹介したケース以外にもひょっとしたらあるかもしれない)
- まずは
|
と$
の組み合わせに要注意 - 適宜グループ参照してあげることで回避可能
- バージョンまたいだら必ず差分やデジタル検版をやろう
他にもこんなところが違うっぽいとか情報送っていただけると嬉しいです。
以上、InDesignの正規表現のメタ文字の解釈がCC2014から変わっている話でした。