如何在文件中获取每个功能模式?

时间:2013-12-02 06:53:21

标签: regex

我有一个包含很多功能的文件,每个功能都像

=======

CREATE PROCEDURE [fName]

code...

code...

END

GO

=======

我想得到每个函数模式,我使用的表达式是

^(CREATE PROCEDURE).*(\r\n.*)+\r\nGO

结果是错误的。可以帮忙吧!谢谢你的回答

3 个答案:

答案 0 :(得分:1)

使用sed:

sed -n '/CREATE PROCEDURE/,/^END$/{H};/^GO$/{s/.*//;x;p;}' input

答案 1 :(得分:0)

尝试更多类似的内容:

(?<=^|\n)(CREATE PROCEDURE [\s\S]+?)(?=\r\nGO|$)

这将匹配每个启动新行的CREATE PROCEDURE实例及其后面的文本,最多但不包括下一个GO指令或文件末尾,以先到者为准。

[\s\S]+?中,问号会使其成为非贪婪的匹配,这就是我们停在 next GO而不是 last GO的方式。 [\s\S]相当于[.\n],即它匹配任何字符。

我假设是.NET风格的正则表达式,因为你没有指定。

答案 2 :(得分:0)

而不是使用“。”并且\ r \ n尝试使用[\ s \ S]它匹配任何空白或不是包含换行符的空格。

CREATE PROCEDURE[\s\S]*GO

这可能需要设置一些正则表达式标志