正規表現を用いた置換No.08153
tm2016 さん 16/08/03 01:02
 
台名の通り正規表現を用いた置換をしたいと考えています。

replaceall "”(.*)”","\“\\1\”",regular;
上記マクロで実行した場合、下記の通りになります。

”文字”文字”文字”

    ↓

“文字”文字”文字”



理想としては下記のようにしたいです。

“文字”文字“文字”

カギカッコのように文字を“ ”で囲むようにしたいです。


ちなみに文字にあたる部分は英数カナ半角全角記号すべてきます。
今回の例は”文字”文字”文字”ですが
”文字”文字”文字”文字”文字”文字”のように増えるパターンもあります。

ご教授の程よろしくお願いいたします。









[ ]
RE:08153 正規表現を用いた置換No.08154
でるもんたいいじま さん 16/08/03 01:35
 
こんばんは。秀丸ユーザの「でるもんた・いいじま」です。

> 台名の通り正規表現を用いた置換をしたいと考えています。
> replaceall "”(.*)”","\“\\1\”",regular;
> 上記マクロで実行した場合、下記の通りになります。
> ”文字”文字”文字”
>     ↓
> “文字”文字”文字”
>
> 理想としては下記のようにしたいです。
> “文字”文字“文字”

正規表現の「*」「+」は通常、可能な限り最も長い範囲にマッチします。
今回の場合、「(.*)」が「文字”文字”文字」にマッチしてしまって
いるので、置換が1回だけ発生して、上記のような結果になります。

対策は2つほどあります。
まず、秀丸の正規表現では「*?」「+?」という書き方ができます。
これを使うと、可能な限り短い範囲にマッチするようになります。
あるいは、他のソフトウェアでこれらが使えない正規表現エンジンを
使っている場合、「[^”]*」で目的を達することができます。

それと蛇足ですが、全角のダブルクォートは特殊な意味を持つ文字では
ありませから、、「\”」と書く必要はありません。

replaceall "”(.*?)”","“\\1”",regular;

replaceall "”([^”]*)”","“\\1”",regular;

[ ]
RE:08154 正規表現を用いた置換No.08163
tm2016 さん 16/08/04 23:22
 
>こんばんは。秀丸ユーザの「でるもんた・いいじま」です。
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>replaceall "”([^”]*)”","“\\1”",regular;

ありがとうございます。
とても勉強になりました。


[ ]