代码之家  ›  专栏  ›  技术社区  ›  JasonRShaver

不匹配报价中项目的正则表达式

  •  1
  • JasonRShaver  · 技术社区  · 15 年前

    所以我试图找出一个正则表达式,但遇到了一些问题。我要查找(匹配)的是大型脚本文件中的所有SQL参数,但不匹配单引号中的项(例如电子邮件地址)。例如:

    INSERT INTO [User]
    (
       [UserGuid], [CompanyGuid], [Name], [EmailAddress]
    ) VALUES (
       @UserGuid1, @CompanyGuid, 'Jason', 'jason@jason.com'
    )
    

    @UserGuid1 @CompanyGuid 匹配,但不是@jason匹配。我一直在使用这个正则表达式:

    (@+[\w]+)
    

    但它与电子邮件地址相匹配,所以我试着做一个消极的前瞻/回顾,如下所示:

    (?<!')[\W](@+[\w]+)[\W](?!')
    

    INSERT INTO [User] ([UserGuid]) VALUES (@UserGuid1)
    

    有人知道我错过了什么吗?可以说:“任何不在报价集中的东西?”。此外,假设均衡报价集是安全的。

    3 回复  |  直到 15 年前
        1
  •  2
  •   SilentGhost    15 年前

    你试过下列方法吗?

    (?<=\W)(@\w+)
    

    基本上,它确保捕获的值前面有一个非单词字符,您也可以添加look-ahead,但这有点多余,因为 + 是贪婪的,无论如何都会匹配到非单词。

    INSERT INTO [User] ([UserGuid]) VALUES ('@UserGuid1') 没有匹配项:

    (?<![\w'])(@\w+)
    
        2
  •  1
  •   Jim Deville    15 年前

        3
  •  1
  •   Ben Torell    15 年前

    试试这个:

    (?<=[^\w'])(@\w+)(?!')

    这指定每个匹配项前面必须有一个非单词字符(单引号除外),然后有一个@符号和一个单词,后面不能有另一个单引号。