連続したキャプチャグループでの置換について

  1. お久しぶりです。
    前回のタイプライタースクロールとマルチカーソルの件では大変お世話になりました。
    今でも当該の操作をするたびに快適だなぁとしみじみ思っています (^^*

    表題の件ですが、\1\1\1\1\1\1\1\2\3\4\5\6など、キャプチャグループを6個以上つなげて正規表現で置換すると最後のほうがおかしくなります。
    (7個の時だけは正常?)

    123456789という文書を^(.)(.)(.)(.)(.)(.)(.)(.)(.)で検索し、

    • \1\2\3\4\5\6で置換すると、12345[NUL]
    • \1\2\3\4\5\6\7\8で置換すると、1234567\[NUL][NUL][NUL][NUL]
    • \1\2\3\4\5\6\7\8\9で置換すると、12345678

    単純に1だけの文書を(.)で検索し\1\1\1\1\1\1で置換しても、11111[NUL]になるなど同様です。

    あるいは、任意の1文字をどこかに入れてもおかしい

    • \1a\2\3\4\5\6で置換すると、1a2345\k[NUL][NUL][NUL]
    • \1\2\3_\4\5\6で置換すると、123_45\k[NUL][NUL][NUL]

    \n\tを入れたり、2文字以上入れた場合は正常です。

    また、元に戻しながら何度か繰り返すとMeryが落ちます。

    ちょっとした文書の整形を力技の正規表現でやってしまうので、また変なところを掘り当ててしまいました。
    今後もこんな正規表現を使うかは分かりませんが、念のため報告しておきます。

    Mery: 3.7.17 (x64, Portable)
    Onigmo: 6.2.0
    C/Migemo: 1.3
    Tidy: 5.8.0
    Hunspell: 1.7.1
    uchardet: 0.0.8
    アウトライン: 3.2.3 (Outline.dll)
    OS: Windows 10 (Version 22H2, OS Build 19045.6093, 64-bit Edition)

     |  nimx  |  返信
  2. お久しぶりです。

    いえいえ、こちらこそ前回は貴重なご意見をありがとうございました。

    > 今でも当該の操作をするたびに快適だなぁとしみじみ思っています (^^*

    結構大きめの仕様変更でしたが、その後も問題なくお使いいただけているようで安心しました ^^

    > 表題の件ですが、\1\1\1\1\1\1や\1\2\3\4\5\6など、キャプチャグループを6個以上つなげて正規表現で置換すると最後のほうがおかしくなります。

    ご報告ありがとうございます。調べてみたところ…

    これは完全にやらかしてますね🙇‍♂️

    2018 年ごろ、Ver 2.8.12 前後のアップデートで「置換時の後方参照」の仕様を大きく変更した際、$1$2といった$を標準仕様とし、\1\2についてはレガシー互換として独自実装で残すかたちにしていました。

    ただ、この\1\2の互換対応にプログラムミスがあったようです。

    私自身は$形式しか使っていなかったため、これまで気づけませんでした。今回ご報告いただけて、本当に助かりました。

    次のバージョンで修正しておきますので、ひとまず$1$2を使っていただければ安全です。リリースまで少しだけお待ちくださいね。

     |  Kuro  |  返信
  3. > 2018 年ごろ、Ver 2.8.12 前後のアップデートで「置換時の後方参照」の仕様を大きく変更した際、`$1`、`$2`といった`$`を標準仕様とし、`\1`、`\2`についてはレガシー互換として独自実装で残すかたちにしていました。

    バージョンの確認をしましたが、Ver 2.8.12ではなくてVer 2.6.12が正しいと思います。

     |  MSY-07  |  返信
  4. これは失礼しました。

    打ち間違いで、正しくは Ver. 2.6.12 ですね。リンクも添えていたのですが、AI で誤字チェックをした際に削除されてしまったようです。

    改めてリンクも記載しておきます。

    【参考】https://www.haijin-boys.com/software/mery/mery-2-6-12#5

     |  Kuro  |  返信
  5. > 2018 年ごろ、Ver 2.8.12 前後のアップデートで
    > 正しくは Ver. 2.6.12

    まさかそんなに前の修正が関わっているとは、なかなかのレア物でしたね。笑

    > $1$2といった$を標準仕様とし、\1\2についてはレガシー互換として独自実装で残すかたちにしていました。

    いつも柔軟に仕様設計していただいて頭が下がります。

    \1$1が混在する正規表現の世界で、慣れと単キーの押しやすさから\ばかり使用していました。
    たまに別のエディタを使って、こっちは$タイプかぁなんて思ったりして。

    更新記事を拝見したところ、$なら二桁にも対応しているんですね。
    7年も経ってから知るなんて、適当にアップデートしていたためにずいぶん遠回りしてしまいました……。

    マクロ化した時にすっきりするのもいいですね。(\1\\1になる)

    > 次のバージョンで修正しておきますので、ひとまず$1$2を使っていただければ安全です。リリースまで少しだけお待ちくださいね。

    圧倒的に$1のほうが有用だと思いましたが、使ってみるとタイピングに手間取るので(特に今回のような連続する場合)、まだまだ\1形式も使えると助かります。
    懐の深いご対応、どうもありがとうございます (^^*

     |  nimx  |  返信
  6. > 圧倒的に$1のほうが有用だと思いましたが、使ってみるとタイピングに手間取るので(特に今回のような連続する場合)

    連続する場合はむしろ$$$$$$と先に打っておけばいいですね。
    誰のためにもならない追記、失礼しました (^^;

     |  nimx  |  返信
  7. 更新作業お疲れさまです!

    Ver 3.7.18 にて、こちらの不具合が解消されたことを確認しました。
    ご対応いただき、ありがとうございます (^^*

    -----
    どうでもいい話

    更新履歴の「マクロ バーへのファイルのドラッグ アンド ドロップによるマクロ登録機能を廃止」を読んで、そんな便利機能があったのか!となりましたが時すでに遅し。

    よくよくメニューを見ると、ファイルを開いた状態で「これを選択(T)」を選べば簡単に登録できることが分かりました。これでも十分ですね。
    (なぜか上下の「選択(L)…」「カスタマイズ(C)…」から遠回りして登録していた気がします)

    最初に覚えたやり方にとらわれて利便性を欠くのももったいないので、過去のアップデート記事からいろいろ吸収したいと思います。

    マクロでいうと、カスタマイズ画面でチェックを外すとすっきりする(ショートカットなどで使用可能のまま非表示になる)という機能を知って、お~!となったりしています。

    これまでの開発とサポートに、あらためて感謝いたします (--*

     |  nimx  |  返信
  8. ご確認いただきありがとうございます。うまく動作しているようで安心しました。

    > 更新履歴の「マクロ バーへのファイルのドラッグ アンド ドロップによるマクロ登録機能を廃止」を読んで、そんな便利機能があったのか!となりましたが時すでに遅し。

    そうなんですよね。便利だと思って実装したのですが、意図しないファイルが誤って登録されることがあり、結局廃止しました。

    マクロは頻繁に登録や編集するものでもないですし… ^^;

    > よくよくメニューを見ると、ファイルを開いた状態で「これを選択(T)」を選べば簡単に登録できることが分かりました。これでも十分ですね。
    > (なぜか上下の「選択(L)…」「カスタマイズ©…」から遠回りして登録していた気がします)

    単独で登録するなら [これを選択] が一番簡単ですね。

    > 最初に覚えたやり方にとらわれて利便性を欠くのももったいないので、過去のアップデート記事からいろいろ吸収したいと思います。

    ご活用いただきありがとうございます。記事は基本的に同梱のCHANGELOG.txtを元に書いていますが、そこに載せていない小ネタを挟むこともあるので、のぞいてもらえると嬉しいです ^^

     |  Kuro  |  返信
スポンサーリンク