1 件の投稿を表示中 (合計 6 個)
  • 作成者
    投稿
  • #19665
    MTJ-K
    参加者

    いつもお疲れ様です。
    正規表現の否定先読み、否定後読みを使用した検索の挙動で気になる点がありましたので、
    別トピックでの返信でも記載しておりますが、改めて報告いたします。

    数字の後に続かない数字の塊を検索しようと以下のような正規表現を記述して「次を検索」を行うと
    数字の並びの途中(数字の後に続く数字)がマッチしてしまいました。
    (?<!\d)\d+

    また、数字が後に続かない数字の塊を検索しようと以下のような正規表現を記述して「前を検索」を行うと
    数字の並びの途中(数字が後に続く数字)がマッチしてしまいました。
    (?!\d)\d+

    以上、どうぞよろしくお願いいたします。

    #19667
    MTJ-K
    参加者

    2つ目の正規表現が間違っていました。
    (?!\d)\d+
    ではなく
    \d+(?!\d)
    を指定して「前を検索」を行った場合でした。
    失礼致しました。

    #19668
    Yutaka Emura
    キーマスター

    MTJ-K 様

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

    これは調べてみます。ご報告ありがとうございます。

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

    Yutaka

    #20667
    MTJ-K
    参加者

    こんにちは、いつも開発お疲れ様です。
    v14.6.正式版がもうそろそろ、とのことでしたので、
    以前報告しました正規表現の否定後読み、否定先読みを使用した検索について
    もし対応が間に合うようであればと思い、書き込みました。
    以上、どうぞよろしくお願いいたします。

    #20673
    Yutaka Emura
    キーマスター

    MTJ-K 様

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

    これは調べてみましたが、すぐに修正するのは、難しいです。もう少し時間があるときに落ち着いて調べてみたいと思います。また、将来的に、Boost の regex++ エンジンを使用するのは、やめて他のエンジンを使用するように変更する可能性があります。その時に、またいい方法が見つかる可能性もあると思います。

    また、私の方で誤解している可能性もあるため、具体的な例を示していただけると幸いです。そして、どのような問題点があるのかも教えていただければ、問題の回避方法をアドバイスすることもできるかもしれません。もしよろしければ、ご協力いただけると幸いです。

    大変申し訳ありませんが、よろしくお願い申し上げます。

    #20680
    MTJ-K
    参加者

    こんにちは、開発お疲れ様です。
    今回の事象ですが、regex++の仕様だったんですね。
    自分もregex++を試してみたのですが、確かに同じような動きになりました。

    具体的な例ですが、以下1行の文章を正規表現「(?<!\d)\d+」で検索した例です。

    123 456_789a0123

    [次を検索]で「123」「456」「789」「0123」と順にマッチするのを想定しましたが、
    実際には「123」「23」「3」「456」「56」「6」…となりました。
    また、文末から[前を検索]を実行した場合も
    「0123」「789」「456」「123」と順にマッチするのを想定しましたが、
    実際には「0123」「012」「01」「0」「9」「78」「7」…となりました。

    問題点ですが、この事象はこちらでのやりとりで気づいたのですが、
    そういった制限があることを知らなかった為、
    正規表現が誤っているのかと必要以上に試行錯誤してしまいました。

    今回の「(?<!\d)\d+」の場合、「(^|(?<=[^\d]))[\d]+($|(?=[^\d]))」で同様の結果になりましたが、
    ちょっと冗長になってしまったように思います。

    regex++の仕様とのことでしたので、利用できない条件など
    ヘルプに記載があれば不必要に悩まずに済むと思います。

    以上、どうぞよろしくお願いいたします。

1 件の投稿を表示中 (合計 6 個)
  • このトピックに返信するにはログインしてください。