[ 新規に投稿する ]

正規表現での複数行検索の不具合?No.38613
odssm さん 20/12/24 15:05 [ コメントを投稿する ]
  (#maxlines:100)begintransaction\n([^(dispose)]*\n)*.*pf_exec.*\n([^(dispose)]*\n)*.*pf_exec
という正規表現で
begintransaction
 xxxxx
 pf_exec_xx
 xxxxx
 pf_exec_yy
 xxxxx
dispose
のような文字列がヒットするのを期待しています。

begintransaction
 TRUE
 pf_exec_xx
 xxxxx
 pf_exec_yy
 xxxxx
dispose
これもヒットしてほしいのですが、
途中にTRUE、FALSEのような文字列があるとヒットしないようです。
V8.91とV8.95で確認しました。
何か回避する設定がありますか?
[ ]
RE:38613 正規表現での複数行検索の不具合?No.38615
秀丸担当 さん 20/12/24 15:57 [ コメントを投稿する ]
 
目的と合っているかわかりませんが、以下のようにしてみて一応できるようでした。

(?#maxlines:100)begintransaction\n((?!dispose).|\n)*?pf_exec.*\n((?!dispose).|\n)*?pf_exec

maxlinesというのはHmJreでもない秀丸エディタ独自のコメントとしての書き方ですが、#の前に?を書いて
(?#maxlines:100)
と書く必要があります。

[^word]
という書き方は、wまたはoまたはrまたはdの一文字ずつ以外という意味になり、wordという文字列以外にはならないです。
括弧があっても括弧の文字そのものと解釈されます。
ある文字列が無い行、というのは一般的によく使われる書き方で
^((?!word).)*$
という書き方があるようです。
これは^から$の一行ですが、改行などを含めたりしても一応なんとかなるようでした。

あと単に*だと最長一致いになるので、*?のほうがいいかもしれません。
[ ]
RE:38615 正規表現での複数行検索の不具合?No.38632
odssm さん 21/01/06 10:18 [ コメントを投稿する ]
  秀丸の仕様の問い合わせではなく、私の個人的な質問になってしまいました。
それにも関わらず、回答ありがとうございます。お手数かけて申し訳ないです。
目的を達成できそうです!
[ ]

[ 新規に投稿する ]