replaceallfastで絵文字を消したいNo.39682
Salem さん 22/04/15 07:46
 
正規表現を範囲指定で置換したいと思います。
指定方法がわからないため、有識者の方、教えてください。

内容は絵文字を消したいという内容です。
イメージとしては

replaceallfast unichar(0x1F600-0x1F64F) , "" , noregular ;

replaceallfast [unichar(0x1F600)-unichar(0x1F64F)] , "" , noregular ;

といったことをやりたいと思いますが、間違っているようです。

[ ]
RE:39682 replaceallfastで絵文字を消したNo.39683
秀丸担当 さん 22/04/15 09:55
 
文字コードの範囲で指定するには、検索/置換ダイアログで入力する場合は、正規表
現をONにして、検索文字列はaからzだとすると
[a-z]
と書くとできます。
マクロにすると、以下のようになります。

replaceallfast "[a-z]", "", regular;

絵文字の場合、書き方のルールが幾つかあるのですが、以下のようにするのが簡単で
す。

replaceallfast @"[\U0001F600-\U0001F64F]", "", regular;

マクロファイルをUnicode(UTF-16)として保存すると、絵文字でもそのまま書けるの
で、そのほうが楽かもしれません。

----

ややこしいですが、以下は詳しい例です。
16進数4桁は\uXXXXのように書きますが、4桁より多い場合は8桁で\UXXXXXXXXと書く
か、5〜8桁で\u{XXXXX}と書く方法があります。

16進数8桁の正規表現で書く場合
replaceallfast "[\\U0001F600-\\U0001F64F]", "", regular; //""の文字列中の\は
\\と書く
または
replaceallfast @"[\U0001F600-\U0001F64F]", "", regular; //@""にすると\はその
まま書ける

16進数5桁の正規表現で書く場合
replaceallfast "[\\u{1F600}-\\u{1F64F}]", "", regular; //""の文字列中の\は\\
と書く
または
replaceallfast @"[\u{1F600}-\u{1F64F}]", "", regular; //@""にすると\はそのま
ま書ける

16進数8桁のマクロの文字列で書く場合
replaceallfast "[\U0001F600-\U0001F64F]", "", regular; //UTF-16のマクロファ
イルで絵文字を直接書くのと同等

16進数5桁のマクロの文字列で書く方法はありません
replaceallfast "[\u{1F600}-\u{1F64F}]", "", regular; //失敗しておかしな結果
になります

正規表現の詳細は、秀丸エディタヘルプの「目次− コマンド− 検索系コマンド−
正規表現」のところ(またはHmJre.dllのヘルプ)にあります。
マクロ上の文字列の書き方は、マクロヘルプの「目次− 式について− 文字列」にあ
ります。

[ ]
RE:39683 replaceallfastで絵文字を消したNo.39684
Salem さん 22/04/15 11:50
 
秀丸担当様、即答ありがとうございます。

>replaceallfast @"[\U0001F600-\U0001F64F]", "", regular;
にて目的のことが達成できました。
これまで1文字ごとに置換させていましたが、楽にまたレスポンスも
改善しそうです。

また、解説もありがとうございます。
よく咀嚼して消化し頭に入れたいと思います。
自身の老化が激しく自信はありませんが。

また、今後もよろしくお願いいたします。

[ ]