7件の投稿を表示中 - 1 - 7件目 (全7件中)
  • 投稿者
    投稿
  • #11330

    ent
    Participant

    以下の2行をEmEditorに張り付けます。
    Year
    Year2012

    検索ワードとして以下の文字列を入力します。
    (Year|Year2012)

    検索オプションとして「正規表現を使用」をON、検索。

    その結果、強調される文字列は どちらの行も Year のみです。

    縦棒|は OR条件なので Year2012 が 強調されないのはおかしいと思われます。

    ご確認よろしくお願いいたします。

    #11332

    Yutaka Emura
    キーマスター

    um1997 様

    いつも EmEditor Professional をお使いいただき、誠にありがとうございます。

    Year が Year2012 に含まれているため、この動作が正しいです。左側の一致が右側の一致より優先するためです。

    Year2012|Year

    と記述していただければ、両方がマッチするようになります。

    お試しいただければ幸いです。

    どうぞよろしくお願い申し上げます。

    #11333

    ent
    Participant

    検索文字列を書き直したところおっしゃる通りの動作になりました。しかしこれでは検索文字列を何かの文字列から一括でOR(|)で結合して作成する場合にチェック漏れが出てきます。

    そもそも OR 検索に優先順位を設けていることはヘルプには書かれておりませんでしたし、
    なによりまったく直感的ではありません。

    「Year が Year2012 に含まれている」と書かれていますが、たとえば以下のような文字列
    Year
    xYear2012

    を、正規表現で(Year|xYear2012) として検索した場合、今度はYearにも、xYear2012 にも ヒットするようになります。どのような場合に優先度による条件の切り捨てが行われるのかはっきりしないようでは、仕事にはつかえません。

    本来 OR は等価に扱うことが期待されるはずです。
    今のような挙動はオプション扱いにしていただけないでしょうか。

    #11334

    Yutaka Emura
    キーマスター

    um1997 様

    いつも EmEditor Professional をお使いいただき、誠にありがとうございます。

    ドキュメントについては、http://www.boost.org/doc/libs/1_52_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html

    を参照していただけると幸いです。

    Expression1 | Expression2 のところに、If Expresion1 can be matched then returns that match, otherwise attempts to match Expression2. と書かれています。

    Year|xYear2012

    とした場合は、x の左側にカーソルが位置する場合は xYear2012 が一致し、Y の左にカーソルが位置する場合は Year に一致するため、両方に一致するのは正しい動作となります。

    わかりにくいとは思いますが、ご理解いただけると幸いです。

    どうぞよろしくお願い申し上げます。

    #11336

    ent
    Participant

    ご回答ありがとうございます。
    この動作が boost_regex の仕様通りだということで気を付けて使用するようにいたします。

    ただ今回の点においてはわかりづらく、使いづらいという点は変わりませんので、将来的に、別の正規表現DLLに入れ替える仕組みを搭載するか、挙動の変更オプションなどはございませんでしょうか。

    #11337

    Yutaka Emura
    キーマスター

    um1997 様

    いつも EmEditor Professional をお使いいただき、誠にありがとうございます。

    ご希望のような動作が可能かどうか調べてみます。

    どうぞよろしくお願い申し上げます。

    #11354

    redakt55
    Participant

    横からすみません。
    いま広く使われている正規表現エンジンの多くでは,? * + { } などの量指定子は最長一致になり,セレクター(A|B)はそうならないようですね。。
    セレクターが最長のものを探索する仕様だと速度が遅くなるので嬉しくないです。どちらか選べるのならいいですが。

    それはそれとして,正規表現エンジンに鬼雲(Onigmo)か鬼車も選べると嬉しいです。
    https://github.com/k-takata/Onigmo/blob/master/README.ja

7件の投稿を表示中 - 1 - 7件目 (全7件中)

このトピックに返信するにはログインが必要です。

友達に知らせる... Tweet about this on TwitterShare on FacebookShare on Google+Email this to someone