正規表現による行頭

さて、久しぶりにお題が出ている。
今回は正規表現が絡むので、メモ帳での動作確認は出来ないが、
幸いにも秀丸とEmEditor Freeが同じ動作をしたので、これを正解と思って良いだろう。
何をやるのかというと、正規表現で行頭を表す^(ヘの字記号)の扱いだ。

本題は置換なのだが、内部では検索して引っ掛かった部分を置き換えてるわけだから、
置換だけじゃなくて検索の動作も見てみた。
この時点で既に秀丸とEmEditorは同じ動作なわけだから納得できるお手本だ。
まず、文字入力が出来る位置を示す縦線の点滅、すなわちキャレットが、
一番上の行の一番左端に置いてある状態を、お手本は1行1桁という表現をしているので倣う。
実際は1行目の1文字目の手前に縦線が引いてある。
1行2桁なら、1行目の1文字目と2文字目の間に縦線がある。
あたしの感覚としては、1行目0.5桁、1行目1.5桁と表現したい気持ちもどこかにある。
が、ともかく、EmEditorや秀丸の初期状態(設定で変えれるかも知れない)で表現は統一する。
その、1行1桁の位置から、正規表現で行頭を表す^を検索してみると、
お手本は両方とも2行1桁の位置で0文字選択がヒットする。真魚も同じ。
^を使って1行1桁をヒットさせるには、逆方向への検索を行うしかない。
つまり、初めに1行1桁の位置にいる状態で既に、^の検索結果と同じ場所という解釈だな。
1行1桁から下へ検索させたのに、そのまま1行1桁で0文字にヒットするわけがない。
せめて1行1桁から1行2桁にかけての1文字選択に動いて欲しいわけだ。
さもなくば、^を検索して、何度「次を検索」させても先に進まないからな。
と言うわけで、お手本の動作も真魚の動作も、検索のみなら問題ないだろう。

ところがお手本は、置換の時は別の動作をするからお手本なのだ。
1行1桁から置換を開始して、1行1桁にヒットしちゃう。
あたしゃ素人な発想から、検索と置換は同じ動作をしなきゃいけないと思いこんでいた。
しかも、秀丸は数年ぶりのつい先日インストールだし、Emは置換で正規表現が使えなかった。
この行頭の件だけではなく、置換の正規表現については検索とは別に、
もっと詳しく研究して作り直す必要があると、今は考えている。
でも、行頭の0文字を0文字に置換とか指定されたら無限ループにならずに済む策はあるのか?
という不安もあって、なんか後回しにしそうな予感。

さて、そんなこともあって秀丸やEmEditor Freeで検索と置換をやってみたのだが、
この二つは検索のダイアログに「上を検索」ボタンと「下を検索」ボタンがあるのね。
真魚はメモ帳をお手本にして、上へか下へかいずれかにポッチして「検索」ボタンだが、
しばしば、先ほど上へ検索したのに忘れて、下へ行くと思って動作が混乱することがある。
お手本のように、上に行くか下に行くか二つのボタンがあれば絶対間違わない。
あと、両方とも、検索ダイアログボックス上からでもF3とShift+F3が使えるのがいい。
これもメモ帳では出来ない。

これまで通り、メモ帳の動作優先の方針は変えたくないわけだから、
なんでもかんでもEmEditorや秀丸にあわせるというわけではないが、
ちゃんと納得できる動作で、しかも複雑にならない場合だけ、
メモ帳以外派にあわせても良いかもね。
ちなみにUndoの動作は、メモ帳見たいに一気にではなく、1文字ずつの方が断然いいと、
プロポーショナルフォント対応してからDelキーを1回多く押しすぎることが多くて、しみじみ思う。

たぶん関連のある記事:

コメントは終了しています。