所以我试图找出一个正则表达式,并且遇到了一些问题。我想要查找(匹配)的是大型脚本文件中的所有SQL参数,但不匹配单引号中的项(例如电子邮件地址)。例如:
INSERT INTO [User]
(
[UserGuid], [CompanyGuid], [Name], [EmailAddress]
) VALUES (
@UserGuid1, @CompanyGuid, 'Jason', 'jason@jason.com'
)
@UserGuid1
和@CompanyGuid
匹配,但不匹配@jason。我一直在使用这个RegEx:
(@+[\w]+)
但它与电子邮件地址相符,所以我试图像这样做一个负面的前瞻/后退:
(?<!')[\W](@+[\w]+)[\W](?!')
但它与以下示例中的'('匹配:
INSERT INTO [User] ([UserGuid]) VALUES (@UserGuid1)
任何人都知道我在这里缺少什么?可以说:“任何不在报价集中的东西?”。此外,假设平衡报价集是安全的。
答案 0 :(得分:2)
你试过以下吗?
(?<=\W)(@\w+)
基本上它确保捕获的值前面带有非单词字符,你也可以添加前瞻但它有点多余,因为+
是贪婪的,无论如何都会匹配到非单词。
以下内容将确保在INSERT INTO [User] ([UserGuid]) VALUES ('@UserGuid1')
中没有任何内容匹配:
(?<![\w'])(@\w+)
答案 1 :(得分:1)
(@ + [^'] +)应该有所帮助。 [^',]将匹配除单引号,空格或逗号之外的任何内容。您可能需要添加更多字符,但这是一般的想法。
答案 2 :(得分:1)
试试这个:
(?<=[^\w'])(@\w+)(?!')
这指定每个匹配必须以非单词字符开头(单引号除外),然后有一个@符号和一个单词,而不是后跟另一个单引号。