Sql 不匹配报价中项目的正则表达式
所以我试图找出一个正则表达式,但遇到了一些问题。我要查找(匹配)的是大型脚本文件中的所有SQL参数,但不匹配单引号中的项(例如电子邮件地址)。例如:Sql 不匹配报价中项目的正则表达式,sql,regex,Sql,Regex,所以我试图找出一个正则表达式,但遇到了一些问题。我要查找(匹配)的是大型脚本文件中的所有SQL参数,但不匹配单引号中的项(例如电子邮件地址)。例如: INSERT INTO [User] ( [UserGuid], [CompanyGuid], [Name], [EmailAddress] ) VALUES ( @UserGuid1, @CompanyGuid, 'Jason', 'jason@jason.com' ) 与@UserGuid1和@CompanyGuid匹配,但不与@
INSERT INTO [User]
(
[UserGuid], [CompanyGuid], [Name], [EmailAddress]
) VALUES (
@UserGuid1, @CompanyGuid, 'Jason', 'jason@jason.com'
)
与@UserGuid1
和@CompanyGuid
匹配,但不与@jason匹配。我一直在使用这个正则表达式:
(@+[\w]+)
但它与电子邮件地址相匹配,所以我试着做一个消极的前瞻/回顾,如下所示:
(?<!')[\W](@+[\w]+)[\W](?!')
有人知道我错过了什么吗?可以说:“任何不在报价集中的东西?”。此外,可以安全地假设平衡的报价集。(@+[^']+)应该会有所帮助。[^',]将匹配除单引号、空格或逗号以外的任何内容。您可能需要再添加几个字符,但这只是一般的想法。(@+[^']+)应该会有所帮助。[^',]将匹配除单引号、空格或逗号以外的任何内容。您可能需要再添加几个字符,但这是总体思路。您尝试过以下方法吗
(?<=\W)(@\w+)
你试过下列方法吗
(?<=\W)(@\w+)
试试这个:
(?试试这个:
(?我认为这行不通,因为第二个示例text.fixed now中的参数前面没有空格(过度工程会让用户感到沮丧,jeff)好的,这似乎是可行的,但它会匹配像“@something”这样的项目,这些项目不是电子邮件地址,而是引用的输入。添加引用的前/后选项会有帮助,比如:(?不,这是必要的。我的正则表达式是说,匹配之前必须有任何非单词,只有一个引号。这是为了防止类似(“@text”)的内容如果我能更好地理解look behind,我可能会进一步压缩它,但指定前面的字符不是引号是绝对必要的。因此,它前面不能有单词或引号,换句话说,(?我认为这不可行,因为在第二个示例text.fixed now(过度工程化会让用户感到沮丧,jeff)中的参数前面没有空格。好的,这似乎可行,但它会匹配像“@something”这样的项目,这些项目不是电子邮件地址,而是引用的输入。添加引用的前/后选项会有所帮助,就像这样:(?不,这是必要的。我的正则表达式所说的是,匹配之前必须有除单引号之外的任何非单词。这是为了防止类似(“@text”)的事情发生如果我能更好地理解look behind,我可能会进一步压缩它,但指定前面的字符不是引号是绝对必要的。因此,它前面不能有单词或引号,换句话说,(?是的,这正是我的评论所说的。我不想卷入一场网络争论,但如果你测试它,你会发现我是对的。我使用的是这个测试仪:我不是说你错了,我是说,在你回答之前,在评论中实际上发布了同样的内容。此外,OP写道,假设平衡报价集是安全的s、 所以前瞻检查又是多余的。哦,明白了。我没有看到你的最后一条评论,因为它是第六条,而且是隐藏的,我继续查找。不用担心:-)不过,从长远来看,这是一个很好的观点。是的,这正是我的评论所说的。我不想卷入一场网络争论,但如果你测试一下,你会发现我是对的。我使用的是这个测试仪:我不是说你错了,我是说,实际上,在你回答之前,同样的东西也被贴在了评论中。此外,OP写道,我假设平衡报价集是安全的,所以前瞻性检查又是多余的。哦,明白了。我没有看到你的最后一条评论,因为它是第六条,而且是隐藏的,我继续查找它。不用担心:-)不过,在前瞻性上,这一点很好。
(?<![\w'])(@\w+)