- 作成者投稿
- 2014年6月21日 4:14 pm #19665
MTJ-K
参加者いつもお疲れ様です。
正規表現の否定先読み、否定後読みを使用した検索の挙動で気になる点がありましたので、
別トピックでの返信でも記載しておりますが、改めて報告いたします。数字の後に続かない数字の塊を検索しようと以下のような正規表現を記述して「次を検索」を行うと
数字の並びの途中(数字の後に続く数字)がマッチしてしまいました。
(?<!\d)\d+また、数字が後に続かない数字の塊を検索しようと以下のような正規表現を記述して「前を検索」を行うと
数字の並びの途中(数字が後に続く数字)がマッチしてしまいました。
(?!\d)\d+以上、どうぞよろしくお願いいたします。
2014年6月22日 2:19 am #19667MTJ-K
参加者2つ目の正規表現が間違っていました。
(?!\d)\d+
ではなく
\d+(?!\d)
を指定して「前を検索」を行った場合でした。
失礼致しました。2014年6月23日 12:11 am #19668Yutaka Emura
キーマスターMTJ-K 様
いつも EmEditor Professional をお使いいただき、誠にありがとうございます。
これは調べてみます。ご報告ありがとうございます。
よろしくお願い申し上げます。
Yutaka
2014年10月16日 9:36 am #20667MTJ-K
参加者こんにちは、いつも開発お疲れ様です。
v14.6.正式版がもうそろそろ、とのことでしたので、
以前報告しました正規表現の否定後読み、否定先読みを使用した検索について
もし対応が間に合うようであればと思い、書き込みました。
以上、どうぞよろしくお願いいたします。2014年10月16日 5:37 pm #20673Yutaka Emura
キーマスターMTJ-K 様
いつも EmEditor Professional をお使いいただき、誠にありがとうございます。
これは調べてみましたが、すぐに修正するのは、難しいです。もう少し時間があるときに落ち着いて調べてみたいと思います。また、将来的に、Boost の regex++ エンジンを使用するのは、やめて他のエンジンを使用するように変更する可能性があります。その時に、またいい方法が見つかる可能性もあると思います。
また、私の方で誤解している可能性もあるため、具体的な例を示していただけると幸いです。そして、どのような問題点があるのかも教えていただければ、問題の回避方法をアドバイスすることもできるかもしれません。もしよろしければ、ご協力いただけると幸いです。
大変申し訳ありませんが、よろしくお願い申し上げます。
2014年10月17日 11:30 am #20680MTJ-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++の仕様とのことでしたので、利用できない条件など
ヘルプに記載があれば不必要に悩まずに済むと思います。以上、どうぞよろしくお願いいたします。
- 作成者投稿
- このトピックに返信するにはログインしてください。