Closed KenjiFuse closed 3 years ago
正規表現のライブラリにいくつかのバグや仕様上の問題がありました。 まず、[]内でのエスケープ文字で\s\Sなどは、使用できません。 また、\000などの8進数表現も不定な文字になってました。
「文字列を検索」では、検索が一致してもさらに続く可能性がある場合は、検索を続けるようにしています。 [\s\S]*が無限に一致する可能性(profileの条件を含む)があるので結果的に一致しないように動作しているようです。 この部分については、仕様変更を考えたほうがよさそうです。
長いこと放置してあったライブラリなので見直した方がよさそうですね。
ご確認頂きありがとうございます。 最近TeraTermから乗り換えたばかりでまだ使いこなせていない状況ですが、画面読み出しのcgetc()→regchar()の機能が非常にインパクトがあり、受信メッセージの自動検出に使用させて頂いております。 優れた機能だと思いますので、[\s\S]*が使用できるようになればさらに活用範囲が広がります。 大変恐縮ですが、仕様変更を期待しております。
いくつかの不都合や仕様を変更してみました。 お試しいただければ幸いです。
http://nanno.dip.jp/softlib/man/rlogin/regex.html http://nanno.dip.jp/softlib/rlogin/2.25.9/
regopen()での対応は難しいでしょうか…。
正規表現ライブラリを見直して*?や+?などの最小一致などに対応してみました。
http://nanno.dip.jp/softlib/man/rlogin/regex.html
上記スクリプトですがスクリプト内で「\」を解釈しているので
p = regopen(".cache[\\s\\S]*profile");
にする必要があります。(ん?GitHubのエディタで消されたのかなぁ?)
ライブラリの見直しに対応頂きありがとうございました。 regopen()もご指定の記載とすることで、期待する結果となりました! 今後も活用させて頂きます。 →本件もCloseします。
lsコマンド等の結果を表示した際に、改行を含む正規表現で文字列がマッチするかどうかを試しています。 【検索対象文字列】 .cache .aaaa .bbbb .profile .cccc 【正規表現】 cache[\s\S]*?profile
上記正規表現では「文字列を検索」でもregcharでもマッチしませんでした。 何かマッチする表現方法がございましたらご教授ください。 (RLogin(x64) Version 2.25.8)