簡體   English   中英

正則表達式:匹配帶有引號的SQL PRINT塊

[英]Regex: match SQL PRINT blocks with quoted text in it

我嘗試使用正則表達式匹配以下文本:

PRINT CONVERT(NVARCHAR,CURRENT_TIMESTAMP,111)+''+ CONVERT(NVARCHAR,CURRENT_TIMESTAMP,108)+'-Test Mode:'+(在@turbo_mode_ind = 1的情況下,然后'一些文本``測試''更多文本。' ELSE'甚至更多的文本“ temp”何時會停止?'END)

PRINT'文本不發短信'

PRINT'文本'test2'文本'

我要匹配的是:

PRINT CONVERT(NVARCHAR,CURRENT_TIMESTAMP,111)+''+ CONVERT(NVARCHAR,CURRENT_TIMESTAMP,108)+'-Test Mode:'+(在@turbo_mode_ind = 1的情況下,然后'一些文本``test''

打印'text``test2''

所以基本上我想匹配:

  • 從PRINT開始
  • PRINT(。*)之后的每個字符
  • 包含換行符(不要在換行符處停止)
  • 在比賽結束時使用\\'{2} \\ w + \\'{2}
  • 非貪婪(。*?)
  • 並且在PRINT和\\'{2} \\ w + \\'{2}之間沒有空行

我已經對此進行了壓縮,但是它仍然匹配空行:

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

評論后編輯:

再次查看需求,我無法快速提出單個正則表達式解決方案。 在您的評論中,您提到您正在使用C#。

因此,可能的解決方案是先將字符串拆分為空白行,然后提取文本。

像這樣:

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);
}  

這應該可以解決問題,但是我沒有測試代碼。

我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM