使用正则表达式匹配两次出现的相同模式时出错

本文关键字:出错 模式 两次 正则表达式 | 更新日期: 2023-09-27 18:29:01

我有一个SQL查询作为字符串,我正在尝试使用regex对其进行查找和替换。

var s = "SELECT ([Document].[ArtifactID]) FROM [Document]
        (NOLOCK) WHERE [Document].[AccessControlListID_D] 
        IN (1) AND ((NOT EXISTS(SELECT CodeArtifactID 
        FROM CodeArtifact (NOLOCK) WHERE AssociatedArtifactID = 
        [Document].[ArtifactID] AND CodeArtifact.CodeTypeID = 1000112))) ";
//line breaks added for readability

为了使查询工作,我需要指定[Document]和CodeArtifact的模式。我有:

var pattern = "FROM''s(?<table>''S+)";
var replacePattern = "FROM EDDSDBO.${table}";
var v = Regex.Replace(s, pattern, replacePattern);
System.Console.WriteLine(v);

但我得到的字符串看起来像:

SELECT ([Document].[ArtifactID]) 
FROM [Document] (NOLOCK) 
WHERE [Document].[AccessControlListID_D] IN (1) AND 
((NOT EXISTS(SELECT CodeArtifactID 
             FROM EDDSDBO.CodeArtifact (NOLOCK) 
             WHERE AssociatedArtifactID = [Document].[ArtifactID] AND CodeArtifact.CodeTypeID = 1000112))) 

CodeArtifact已被替换,但[Document]未被替换。我一定是错过了什么。有什么想法吗?

使用正则表达式匹配两次出现的相同模式时出错

您的代码对我有效。我能想到的唯一问题是,在源代码中,FROM[DOCUMENT]之间有多个空格,在这种情况下,您可以删除空格或使用

FROM''s+(?<table>''S+)