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},因为我无法确定文件是否只有\n,或只有\ror \r\n,所以它在所有情况下都可以工作(尽管它可以连续匹配两个换行符,但有一个--可以让它很好) .

于 2013-09-30T17:09:26.610 回答