正規表現の「.」が誤認識No.07853
TAKA さん 01/03/06 22:07
 
TAKA です。

正規表現の「.」が誤認識される場合がありますので、お知らせし
ておきます。
#正規表現全体での問題だとは思いますが。

//テストファイル(ここから)
TEST[EOF]
//テストファイル(ここまで)

「[EOF]」はファイルの終了です

カーソルを「[EOF]」上に持ってきて、「検索→検索」で検索文字
列に、任意の2文字を検索させる目的で「..」を入力、正規表現を
ONにして、「上候補」で検索をかけると「T[EOF]」が検索されてし
まいます。
「[EOF]」は文字ではないので、「ST」が検索されるべきだと思い
ます。

ファイルの先頭から「下候補」で検索していくと最後は「ST」検索
で終了となり正常に動作しています。

以上のことから「上候補」の正規表現検索の問題だと思います。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

そういう訳で、よろしくお願いします。 > 秀丸担当さん


文字の間に、指定した文字を挿入する目的で以下のマクロを動かし
ている時に気がつきました。

// テストマクロ1(ここから)
    gofileend;
    replaceup ".\\f.", "\\0@\\1", regular;
    while( result )
    {
        findup;
    }
    endmacro;
// テストマクロ1(ここまで)

別のマクロ

// テストマクロ2(ここから)
    replaceall ".", "@\\0", regular;
    replaceall "^.\\f.", "\\1", regular;
    endmacro;
// テストマクロ2(ここまで)

で、無理やり?、逃げれますけど。

本当はもっとスマートな書き方があると思うのですが、正規表現は
勉強中でして、うまい方法を思いつきませんでした。

[ ]
RE:07853 正規表現の「.」が誤認識No.07855
Arimac さん 01/03/07 00:27
 
JRE32.DLLがどう呼ばれているかトレースしてみたところ

Jre2GetMatchInfo:lpjreJre = 0x0046E470, nStart = 0, lpszStr = (TEST[EOF])
Ret = 1, nPosition = 0, nLength = 2, msg = ()
Jre2GetMatchInfo:lpjreJre = 0x0046E470, nStart = 1, lpszStr = (TEST[EOF])
Ret = 1, nPosition = 1, nLength = 2, msg = ()
Jre2GetMatchInfo:lpjreJre = 0x0046E470, nStart = 2, lpszStr = (TEST[EOF])
Ret = 1, nPosition = 2, nLength = 2, msg = ()
Jre2GetMatchInfo:lpjreJre = 0x0046E470, nStart = 3, lpszStr = (TEST[EOF])
Ret = 1, nPosition = 3, nLength = 2, msg = ()
Jre2GetMatchInfo:lpjreJre = 0x0046E470, nStart = 4, lpszStr = (TEST[EOF])
Ret = 1, nPosition = 4, nLength = 2, msg = ()

てな事に・・・(^^;
"[EOF]"ってそのまま文字で渡してるみたいなんですが(^^;

[ ]
RE:07855 正規表現の「.」が誤認識No.07856
TAKA さん 01/03/07 00:44
 
TAKA です。

>"[EOF]"ってそのまま文字で渡してるみたいなんですが(^^;

調査ありがとうございます。
そういうことなら、「[EOF]」を渡さないように直してもらうだけ
の簡単な手当てで修正出来そうですね。

[ ]
RE:07853 正規表現の「.」が誤認識No.07858
山紫水明 さん 01/03/07 10:48
 
 TAKAさん,こんにちは。

》「[EOF]」は文字ではないので、「ST」が検索されるべきだと思い
》ます。

》ファイルの先頭から「下候補」で検索していくと最後は「ST」検索
》で終了となり正常に動作しています。

》以上のことから「上候補」の正規表現検索の問題だと思います。
》^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

 現象再現しました。

》// テストマクロ2(ここまで)

》で、無理やり?、逃げれますけど。

》本当はもっとスマートな書き方があると思うのですが、正規表現は
》勉強中でして、うまい方法を思いつきませんでした。

 やはりさすがにスマートさにこだわられるのですね。テストマクロ2で解決すれ
ば,喜んでしまう私などとは年期の入れ方に雲泥の差を感じてしまいます。(^^)

 ところで,現状で対応するとして,テストマクロ1で left 文を使い,

//---------------------------------------
    gofileend;
    left;   //これを加えただけ
    replaceup ".\\f.", "\\0@\\1", regular;
    while( result ) findup;
    endmacro;
//-----------------------------------------

 こういうのは TAKA さんの目から見れば,スマートとはいえないのでしょうね?
 また何か外している?

     では, (^^)/~
                                        山紫水明

[ ]
RE:07856 正規表現の「.」が誤認識No.07863
ひろ さん 01/03/07 15:20
 
 TAKA さん今日は、ひろです。
> そういうことなら、「[EOF]」を渡さないように直してもらうだけ
> の簡単な手当てで修正出来そうですね。
 というかヘルプには、
> また,秀丸ではテキスト末にあるEOFは検索できません。
とあるので、検索対称になっていること自体おかしいのかも。

[ ]
RE:07858 正規表現の「.」が誤認識No.07871
TAKA さん 01/03/07 19:16
 
TAKA です。

> ところで,現状で対応するとして,テストマクロ1で left 文を使い,
>
>//---------------------------------------
>    gofileend;
>    left;   file://これを加えただけ
>    replaceup ".\\f.", "\\0@\\1", regular;
>    while( result ) findup;
>    endmacro;
>//-----------------------------------------
>
> こういうのは TAKA さんの目から見れば,スマートとはいえないのでしょうね?

なるほど、最初に「left」でわざとずらしておくのですね。全く思
い付きませんでした。
コメントとして、「[EOF]の誤認識のずれを吸収させるため」とで
も書いておけば問題ないと思います。

テストマクロ2より、こちらの方が良いと思います。
#アイデア次第でこうも簡単に対応出来るとは。


正規表現の秘められた可能性で、「replaceallfast」一回で出来れ
ばいいなーとは思うのですが、多分無理なんでしょう。
#いや、出来るはず。
##うーん。無理か。
###いやいや。
####やっぱり駄目か。
 :
 :以下続く
 :


> また何か外している?

いえいえ、「left」のアイデアありがとうございます。

私自身、大ボケをかますことがありますので、何かあれば遠慮なく
突っ込んで下さい。 > 山紫水明 さん & ALL

これからも、よろしく。

[ ]
RE:07863 正規表現の「.」が誤認識No.07872
TAKA さん 01/03/07 19:20
 
TAKA です。

>> そういうことなら、「[EOF]」を渡さないように直してもらうだけ
>> の簡単な手当てで修正出来そうですね。
> というかヘルプには、
>> また,秀丸ではテキスト末にあるEOFは検索できません。
>とあるので、検索対称になっていること自体おかしいのかも。

その通り(検索対称になっていること自体おかしい)ですので、
「[EOF]」を渡さないように直してもらうだけの簡単な手当てで修
正出来そうですね。

[ ]
RE:07871 正規表現の「.」が誤認識No.07877
きいろいまふらあ さん 01/03/07 20:36
 
全然関係ないことで恐縮ですが、

#7853の

>     left;   //これを加えただけ

が、#7871で

> >    left;   file://これを加えただけ

になってるのは、なんで?
TAKAさんが引用しそこねただけでしょか?
それとも秀ネットの不具合かしらん?

昔も見た気がする。あれはなんだっけか?

[ ]
RE:07877 正規表現の「.」が誤認識No.07878
TAKA さん 01/03/07 20:52
 
TAKA です。

>#7853の
>
>>     left;   //これを加えただけ
>
>が、#7871で
>
>> >    left;   file://これを加えただけ
>
>になってるのは、なんで?
>TAKAさんが引用しそこねただけでしょか?
>それとも秀ネットの不具合かしらん?

すいません。これは、私のミスです。
秀ネットの不具合ではありません。

で、原因なのですが、普段はメールにBeckyを使っているのですが、
ちょっとした事情で「Outlook」を使用しました。
「Outlook」では、デフォルトの設定では、「//」に対して、
「file://」と表示されますので、そこから切り取りした結果、
「file:」というゴミがついてしまいました。
申し訳ありません。 > ALL


>昔も見た気がする。あれはなんだっけか?

その人も「Outlook」をデフォルトの設定で使用していたのだと思
います。
ちなみに、表示させない方法もあるとは思うのですが、私は使用し
ないので知りません。

[ ]
RE:07878 正規表現の「.」が誤認識No.07879
きいろいまふらあ さん 01/03/07 21:30
 
> 「Outlook」では、デフォルトの設定では、「//」に対して、
> 「file://」と表示されますので、そこから切り取りした結果、

ああ、Outlookでしたか。そういやそうだったかも。
すっきりしました。
お気になさらぬよう。>TAKAさん

[ ]
RE:07871 正規表現の「.」が誤認識No.07893
山紫水明 さん 01/03/08 15:08
 
 TAKAさん,こんにちは。

》正規表現の秘められた可能性で、「replaceallfast」一回で出来れ
》ばいいなーとは思うのですが、多分無理なんでしょう。
》#いや、出来るはず。
》##うーん。無理か。
》###いやいや。
》####やっぱり駄目か。
》 :
》 :以下続く
》 :

 やはりTAKAさんのこだわりはここにあったのですね。
 どうも難しそうです。不可能の証明,もしかしたら可能かもしれませんが,こ
ちらの方もややこしそうです。(^^;

 で,それはおいといて,
 前回のマクロの
    replaceup ".\\f.", "\\0@\\1", regular;
    while( result ) findup;
の部分ですが,
  searchup と findup を対にして使うことはやったことがあるのですが,この例
のように replace と対にして使うと findup は置換をするのですね。
  findup が置換もやってしまうことにこれまで気づきませんでした。これはこう
いう仕様だったのですね。

     では, (^^)/~
                                        山紫水明

[ ]
RE:07872 正規表現の「.」が誤認識No.07906
秀丸担当 さん 01/03/08 18:55
 
>その通り(検索対称になっていること自体おかしい)ですので、
>「[EOF]」を渡さないように直してもらうだけの簡単な手当てで修
>正出来そうですね。

どうもそのようです。
調べておきます。

[ ]