首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex:将SQL打印块与其中引用的文本匹配

Regex:将SQL打印块与其中引用的文本匹配
EN

Stack Overflow用户
提问于 2009-11-26 10:53:11
回答 1查看 303关注 0票数 0

下面是使用正则表达式进行匹配的文本:

打印转换(NVARCHAR,CURRENT_TIMESTAMP,111) +‘’+转换(NVARCHAR,CURRENT_TIMESTAMP,108) +‘-Test模式:’+(当@turbo_mode_ind =1然后‘一些文本’测试‘更多的文本。还有更多的短信“临时”什么时候停止呢?(最后)

打印“文本不要文本”

打印“文本”“test2 2”“文本”

我想要匹配的是:

打印转换(NVARCHAR,CURRENT_TIMESTAMP,111) +‘’+转换(NVARCHAR,CURRENT_TIMESTAMP,108) +‘-Test模式:’+(当@turbo_mode_ind =1然后‘一些文本’‘测试’时

打印‘文本’‘test2 2’‘

所以基本上我想要匹配:

从“打印”( PRINT )开始的每个字符(在PRINT ( line-breaks)

  • with,.*)

  • 包含行后)中断(不要停在match

  • non-greedy (.*?)

  • 末尾的‘{2}\w+\’{2},并且打印和\'{2}\w+\'{2}之间没有空行。

我已经对此进行了补充,但它仍然与空行匹配:

PRINT.*?\'{2}\w+\'{2}(?!\n\s*\n)

EN

回答 1

Stack Overflow用户

发布于 2009-11-26 12:19:16

评论后的编辑:

再看一遍需求,我无法快速想出一个单一的正则表达式解决方案。在您的评论中,您提到您正在使用C#。

一个可能的解决方案是先将字符串拆分为空行,然后提取文本。

就像这样:

代码语言:javascript
复制
string pattern = @"^$";

foreach (string result in Regex.Split(input, pattern, RegexOptions.Multiline) 
{
    Regex rxFindSql = Regex(@"PRINT.*?\'{2}\w+?\'{2}", RegexOptions.SingleLine)       
    MatchCollection matches = rxFindSql.Matches(result);
}  

这应该是可行的,但我没有测试代码。

我希望这能帮到你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1802991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档