正規表現での複数行検索の不具合?
No.38613
odssm
さん 20/12/24 15:05
(#maxlines:100)begintransaction\n([^(dispose)]*\n)*.*pf_exec.*\n([^(dispos
e)]*\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
秀丸の仕様の問い合わせではなく、私の個人的な質問になってしまいました。
それにも関わらず、回答ありがとうございます。お手数かけて申し訳ないです。
目的を達成できそうです!
[
△
]