> どうやって判別するのか。これ、どんな方式でやろうと、ついて回る問題
何かマーキングしているんでしょうね。
あるいは,内部的には番号ではなくアドレスになっているのかも……って,いずれにしても数値である以上は同じ問題を内在しているわけだなぁ……。
飛び先番号の前に【必ず】スペースが配置されていれば,いや逆にそれを仕様とするなら出来るのではないかと思います。
例えば,空白類+番号のセットを,変換後は一旦,特定キャラクタ(列)+番号にしておいて,最後に特定キャラクタ(列)を空白に一括置換する……という感じ。
もちろん,その場合は,実行開始時に特定キャラクタ(列)が一切存在しないかどうかチェックする必要はありますが,比較的容易にできて,かつ実行条件としてもそれほどの障壁ではないと思います。自分ならそのようにします……と言うか,しばらく考えてみましたが,それ以外に(優劣はともかく)案が出てこない。
具体的には……
#56 "[\s\t]【旧行番号】" #m "※【新行番号】" #m "ay"
……のように1行単位で置換しておくと,空白類を前置しているのが前提なので,他の行番号のときは置換対象にはならず,
#56 "※\([0-9]+\)" #m " \1" #m "ay"
……という感じで最後にに全部スペースに戻す。(タブもスペースになるのは「仕様」)
滅多に使わない文字,キーボードから入力できる記号にそっくりな記号……例えば「♯」(#ではない),「♭」(bではない),「∃」(ヨではない……があまりに見分けがつかないけど)……などがよいのかな。