一括表示

− 野ざらし言 −

[5221] スクリーンエディタの正規表現

文太 2022/12/27(Tue) 16:54
 置換の話です。そういうものなんですね、というところです。
 話を単純化していますので、正規表現(VWX)を使った場合、とお考えください。
 以下、半角スペースとタブを使っています。


     abc	;置換前、スペース4つ
    abc		;置換後、スペース3つ

 こんな置換をしたい場合、どうしますか?

\x ^    abc	;スペース4つ
   abc		;スペース3つ

 すこし抽象化すると、こう。

\x ^    a
   a

 'a'というキーがあるから可能。[^ ]でさらに抽象化。

 しかし、

    		;置換前、スペース4つ
   		;置換後、スペース3つ

 ならどうしますか? どうするんだろう?

 僕は、「検索文字列」で

\x ^ 		;スペース1つ
\x ^ +		;スペース1つ以上  ★同じ意味になるからね。

 の区別ができるのだろうと思っていたのです。Vz + VWX ではダメですよね。

\x ^    [^ ]$	;ダメです。否定が1文字くってヒットしません。
		;これ、ちょっと脱線してるけど。

 うーん、そういうものなんだ。

 そういうものだよ、と確認していただいたり、こうすれば? とかあったら
お教えください。チガウ! も大歓迎です。

 sedだと、s/srch str/repl str/1,2,3,g とかフラグがあるので(使わなくても)
直観のそのままでいくのですが。

あああああ	;置換前
ああああ	;置換後

 の置換は、s/^あ// でふつうにできます。

 別に「変だ!」と考えているわけではありませんが、(しつこいけど)sed的に
発想すると、Vz+VWX の世界では、

s/^あ//		で
"\x ^あ" ""	で

あああああ
が

ああああ
でなく

空行になってしまう、ということです。けっこうすごいですよね。

 けっこう落とし穴じゃないかな、と。
 僕、なんか間違ってますかね?
 きっと、スクリーンエディタだと、一般に、こういうものなんでしょう???

 まとめると、正規表現というものは徹底的に行志向で、スクリーンエディタの
文字志向と共存させるときには、ユーザはそれなりの注意を要する、ということ
なのでしょう、、、か。

[5222] Re: スクリーンエディタの正規表現

めざら 2022/12/27(Tue) 21:12
[5221]へのコメント http://mezala.la.coocan.jp/
#56 "\x ^あ" #m "" #m "ay" で「あああああ」の行が空になるのは,単純なバグではないですか?

(その結果をもたらすのはふつう "\x ^あ*" なのでしょうけど,厳密ではない。)

先人が作って,バグ取りが完了しないまま開発が終了してしまったものであれば,その癖を把握して使うしかないですよね。

どうしても気に食わないのなら,マクロで「外注」できるのが VZ ですし。

[5223] Re^2: スクリーンエディタの正規表現

文太 2022/12/27(Tue) 23:10
[5222]へのコメント
めざらさん

>#56 "\x ^あ" #m "" #m "ay" で「あああああ」の行が
>空になるのは,単純なバグではないですか?

 そう考えるべきですか? どうも頭の整理がうまくいかない。

#56 "あ" #m "" #m "ay" ;正規表現なし。1文字のゼロ置換(※)

 これなら、「あああ」が全部消えるのが正しいですよね。
 で、"\x ^あ"だと、1文字削除が済んだ瞬間に、次の「あ」が行頭に来ちゃうのかな、
と考えたり……。(1)
 ただ、置換のカーソル位置が次の位置に移動するのが正しい所作だろう、とかも
考えたりして……。この場合、(1)はどうなの? 消されて次の文字が移動???
カーソルはどこ?

 バグ、というほうが、いいのかなぁ???

>(その結果をもたらすのはふつう "\x ^あ*" なのでしょうけど,厳密ではない。)
 いや、これはまずいです。「あ」が0個でもいいので、行頭の1字にすべて当たり、
Vz+VWXのばあい、今回みたように、ファイルぜんぶがまっ白になると思います。
 「あ」だろうが何だろうが、全部消します。テストしてみたら、まっ白。

"\x ^あ+" と言いたかったのですよね。

 しかし元に戻ると、これと"\x ^あ"が同じ結果を出すと、えらく混乱しますね。

 あ、他のエディタではどうですか? xyzzy(?)とか?


(※)あれはゼロ置換と呼ばないですか? 個数を数えるために、同じものに置換する
のが「ゼロ置換」? 伝統的にはどっちでしょうか?

[5224] string.asm

文太 2022/12/27(Tue) 23:24
[5223]へのコメント
 1315行。ふぇーーーん。いまは、これを読む気力はありません。
 アセンブラの1300行は、考え方によっては、厳密をきさなければ、
読むのが大変な行数ではないと思うのだけど。

 語弊があるかもしれないけど、我々はVzの「達人」です。単語を
知ってるから。
 だから、細かいこと言わなければ(直すとか言わなければ)読めなくは
ないと思うのだけど。

 でも、いま QuickBasic なの。逃げてるんだな、、、ふふふ。


;****************************
;	'string.asm'
;****************************

	include	vz.inc

;--- Equations ---

;OLDPAGM	equ	TRUE

WILD_HEAD	equ	00000001b
WILD_TAIL	equ	00000010b
WILD_CASE	equ	00000100b
WILD_HCASE	equ	00001000b
WILD_H		equ	00010000b
WILD_T		equ	00100000b
WILD_F		equ	10000000b

SCH_WRDSCH	equ	00001b
SCH_ICASE	equ	00010b
SCH_IZENHAN	equ	00100b
SCH_REXP	equ	01000b
SCH_ICTRL	equ	10000b
SCHOPTCNT	equ	5

TERMCODE	equ	0FFh

IFDEF REXP
VW_KANJI	equ	00000001b
VW_VZMETA	equ	00000010b
VW_VWMETA	equ	00000100b
VW_WORD		equ	00001000b
VW_IGCASE	equ	00010000b
VW_JAPAN	equ	00100000b
VW_REXPR	equ	01000000b
VW_SCHVWX	equ	10000000b
ENDIF

 だいたい設定は分かるもの。ほんと?

[5227] バグに認定

文太 2022/12/28(Wed) 10:51
[5223]へのコメント
>>単純なバグではないですか?
>他のエディタではどうですか? xyzzy(?)とか?

\x ^あ		;(1)
と
\x ^あ+		;(2)
が

あああああ

 という行頭に位置する対象文字列に対し、「あ」を全部消してしまう、
という同じ結果を出すというのは、バグと呼ぶべきです。

 秀丸では、(1)で、1個しか消しませんでした。それが素直な動きという
ものでしょう。

[5225] 整理

文太 2022/12/27(Tue) 23:37
[5222]へのコメント
\x ^ 
\x ^ +

 上2つが等価になるとどう困るのか?


   aaa
を
  aaa
としたい場合(スペース1つを削除)

#56 "\x ^ " #m "" #m "AY"
ではダメで
#56 "\x ^   a" #m "  a" #m "AY"
としなければならない。

'a'のようなアンカーがない場合は?

     ;スペース4つ
を
    ;スペース3つ
にしたいなら、

"\x ^    "
"   "

と正確にやるしかない。

 これで整理および対処法になるのかな?

 アンカーがあってもなくても、同じだろ。

↑ このページの先頭