6.00正規表現の置換が変?No.05241
ならい さん 06/09/18 17:16
 
すみません何度も投稿をしくじりました。^^;)

6.00正式版を使い始めたのですが、正規表現の置換がどうも変です。
例えば、
a fiberglass resin or similar compound(改行)
a fiberglass resin or similar compound(改行)
a fiberglass resin or similar compound(改行)
a fiberglass resin or similar compound(改行)
という箇条書きのような文の(改行)をとるために、
replaceall"[a-zA-Z0-9]\\f\n\\f[a-zA-Z0-9]","\\0 \\2",regular;
というマクロをかけると
a fiberglass resin or similar compound a fiberglass resin or
similar compound a fiberglass resin or similar compoun 
 fiberglass resin or similar compound        ^^^^
となってしまいます。
^^の部分が変です。
これは再現が一定でなく、規則性がはっきりとつかめないのですが、
単語ではなく、ある程度の長い文の間の改行を取ろうとすると、
3つ目以後くらいの文でおかしくなります。


[ ]
RE:05241 6.00正規表現の置換が変?No.05242
IKKI さん 06/09/18 18:20
 
IKKI です。こんにちは。

検索できる文字数には上限があります。
詳細は、マクロヘルプの「目次 - 検索系文 - 検索/置換文字列の上限について」に
書かれています。

ところで、改行をとるだけなら

replaceallfast "\n", "", regular;

でいいような気もします?

[ ]
RE:05241 6.00正規表現の置換が変?No.05243
さん 06/09/18 20:11
 
横から失礼します。

>これは再現が一定でなく、規則性がはっきりとつかめないのですが、
>単語ではなく、ある程度の長い文の間の改行を取ろうとすると、
>3つ目以後くらいの文でおかしくなります。

私にも同じような事例が起きたので、
HmJre.dllのPerl同じ方式のタグ指定
(一般的正規表現互換のタグ付き正規表現)
例えば、
>replaceall"[a-zA-Z0-9]\\f\\n\\f[a-zA-Z0-9]","\\0 \\2",regular;

replaceall"([a-zA-Z0-9])\\n([a-zA-Z0-9])","\\1 \\2",regular;

と書き換えて、当座をしのいでいます。
不具合には、改行が関係しているのは確かなようです。

[ ]
RE:05241 6.00正規表現の置換が変?No.05244
ならい さん 06/09/19 08:07
 
IKKIさん、桂さん、レスありがとうございます。

和文と英文が混じった文から英文だけの改行を取ろうとしているので
正規表現が必要なのです。

再現性ですが、どうも文の長さ(文字数?)と改行に関係がありそう
です。また、乱れ方は一定ではありません。
例えば次ような文に

A fiberglass resin or similar compound
A fiberglass resin or similar compound
A fiberglass resin or similar compound
A fiberglass resin or similar compound
A fiberglass resin or similar compound
A fiberglass resin or similar compound
A fiberglass resin or similar compound

Fiberglass
Fiberglass
Fiberglass
Fiberglass
Fiberglass
Fiberglass
Fiberglass
Fiberglass
Fiberglass

に、置換
replaceall"[a-zA-Z0-9]\\f\n\\f[a-zA-Z0-9]","\\0 \\2",regular;
を実行すると、

A fiberglass resin or similar compound A fiberglass resin or
 similar compound A fiberglass resin or similar compoun
fiberglass resin or similar compounb r fiberglass resin or
similar compoun fiberglass resin or similar compounr l
fiberglass resin or similar compound

Fiberglass Fiberglass Fiberglass Fiberglass Fiberglass
Fiberglass Fiberglasiberglasiberglass

となります。
分かりずらいですが、文の最初の大文字を目安にして見て頂くと
乱れ方の不規則性がわかると思います。
最初の方はちゃんと置換されていますが、後の方は単語のつながり
がおかしくなっています。
この現象は、文の繋がりで必ず起こるというわけではなく、文字の
組み合わせには関係なさそうです。同じような条件なのに現れる
場合と現れない場合があります。
発生する頻度は、感じとしては、A4一枚の長さの英文に3,4箇所くらい
でしょうか。

今は旧バージョンに戻って使っています。


[ ]
RE:05244 6.00正規表現の置換が変?No.05246
ENCODINGSHIFTJIS さん 06/09/19 12:12
 
正規表現 全置換
([a-zA-Z0-9])\n(?=[a-zA-Z0-9])

\1
では、良好でした、

¥1の後には 空白
HmJre 1.79
禁則on 単語で改行 オートインデントon
行番号表示 データ行
折り返し 固定

[ ]
RE:05246 6.00正規表現の置換が変?No.05249
ENCODINGSHIFTJIS さん 06/09/20 13:25
 
マッチ範囲の最小化では
(?<=[a-zA-Z0-9])\n(?=[a-zA-Z0-9])

[space]
ですね

[ ]
RE:05244 6.00正規表現の置換が変?No.05250
さん 06/09/20 16:29
 
秀丸エディタヘルプに、

----------------------------------
正規表現
 目次− 検索系コマンド− いろいろな検索例−正規表現

正規表現は、外部のDLL(プログラム)によって実現されています。
 秀丸エディタでは、「HmJre.dll」と「Jre32.dll」と言うDLLが標準でインストー
ルされ標準の設定では、「HmJre.dll」を使用するように設定されています。
 正規表現検索で使用するDLLの変更は、動作環境の環境で行うことができます。
 Hmjre.dllの詳細な仕様については、 HmJre.dllのヘルプ  を参照してください。
----------------------------------

・・・とありまして、「HmJre.dllのヘルプ」の
「一般的正規表現互換のタグ付き正規表現」という箇所に、

----------------------------------
タグ指定したい部分をカッコで囲みます。例えば、英数字と数字の組み合わせを検索
しつつ、そのヒットした部分の数字の部分だけをタグ指定したい場合は、その数字に
相当する部分をカッコで囲みます。

[a-z]+([0-9]+)
 のように指定します。そして、タグとしては、\1というのが数字の部分に相当する
ことになります。または、

([a-z]+)([0-9]+)
 のようなパターンを指定した場合は、英字の部分が\1になり、数字の部分が\2とな
ります。
----------------------------------

とあって、それで

> >replaceall"[a-zA-Z0-9]\\f\\n\\f[a-zA-Z0-9]","\\0 \\2",regular;

> replaceall"([a-zA-Z0-9])\\n([a-zA-Z0-9])","\\1 \\2",regular;

とが同じ、というわけです。

[ ]
RE:05244 6.00正規表現の置換が変?No.05251
さん 06/09/20 22:28
 
↓Ver6.01で修正されたようです(検証はしてません)

秀丸エディタ改版履歴
http://hide.maruo.co.jp/software/hidemaruhist.html
2006/09/20 Ver6.01
\fを使ったタグ付き正規表現の置換がうまくできなくなっていた問題修正。
 

[ ]
RE:05251 6.00正規表現の置換が変?No.05252
ならい さん 06/09/21 07:45
 
桂さん、こんにちは。

6.01で修正されていますね。
確認しました。

[ ]