0

多数の単一行コメントを含む次のような SQL ファイルを考えてみましょう。

-- I'm a little teapot
<<< not a comment >>>
-- some random junk
-- random Mary had a
-- little lamb random
-- more random junk
<<< not a comment >>>

正規表現を使用して、文字列を照合し、Mary.*?lamb連続する (上下の) 単一行コメントをすべて抽出しようとしていました。

予想される出力は次のようになります。

-- some random junk
-- random Mary had a
-- little lamb random
-- more random junk

私はこれらの線に沿って何かを試みていましたが、運がありませんでした.

(--[\S\t\x20]*\n)*?(--[\S\t\x20]*?Mary.*?lamb[\S\t\x20]*?\n)(--[\S\t\x20]*\n)*
4

1 に答える 1

1

多分あなたはそのようなことを試すことができます:

^((?:--(?:(?!Mary)[^\n])*[\r\n]{1,2})*)(--[^\n]+?Mary[\s\S]+?lamb[^\n]+[\r\n]{1,2})((?:--(?:(?!Mary)[^\n])*[\r\n]{1,2})*)

正規表現101のデモ

また、これは Java であるため、上記の正規表現の前にバックスラッシュを追加して機能させる必要があります。

^((?:--(?:(?!Mary)[^\\n])*[\\r\\n]{1,2})*)(--[^\\n]+?Mary[\\s\\S]+?lamb[^\\n]+[\\r\\n]{1,2})((?:--(?:(?!Mary)[^\\n])*[\\r\\n]{1,2})*)

私が使用しているのは、ファイルに のみ、または のみ、または のみが含まれ[\\r\\n]{1,2}ているかどうかがわからないため、すべての場合に機能するためです (ただし、2 つの改行が連続して一致する可能性がありますが、それをうまく処理する があります)。 .\n\r\r\n--

于 2013-09-30T17:09:26.610 に答える