除包含ValidationGroup的验证程序之外的所有验证程序的正则表达式

时间:2012-04-23 17:07:23

标签: regex visual-studio-2010

我试图在Visual Studio 2010中找到我们项目中的所有验证器。这些就是:

<asp:RequiredFieldValidator
    ID="validator"
    runat="server"
    ErrorMessage="*"
    ControlToValidate="control"
    Display="Static"
    ValidationGroup="main">*</asp:RequiredFieldValidator>

<asp:RequiredFieldValidator
    ID="validator"
    runat="server"
    ErrorMessage="*"
    ControlToValidate="control"
    Display="Static"
    ValidationGroup="main"
    Text="*"/>

我尝试使用以下验证器但没有结果:

(\<asp\:[a-zA-Z]*Validator)~((.|\n)*ValidationGroup)(.|\n)*\/\>
(\<asp\:[a-zA-Z]*Validator)~(ValidationGroup)(.|\n)*(\<\/asp\:[a-zA-Z]*Validator\>)$

你看到它们中有任何错误吗?

修改

我已成功尝试过以下(但仅限于网站http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx):

\<asp\:[a-zA-Z]*Validator(?![^/]*ValidationGroup)[^/]*\<\/asp\:[a-zA-Z]*Validator\>

但是当我换掉了?!与〜它仍然无法在Visual Studio中工作。

但可能 mellamokb 发布了正确答案!

2 个答案:

答案 0 :(得分:1)

我构建了这个VS正则表达式,它似乎适用于第一种情况:

(\<asp\:[a-zA-Z]*Validator)((:b|\n)+~(ValidationGroup)[a-zA-Z]+="[^"]*")+\>

我采用了您的基本想法,并使用表达式(:b|\n)+[a-zA-Z]+\"[^"]*"单独搜索每个属性。然后我搜索倍数以获取所有属性,最后添加~(ValidationGroup)以防止匹配完成,如果任何属性命名为ValidationGroup。

答案 1 :(得分:0)

这也可能有用。

  < [A-Za-z_:][\w:.-]*Validator
    (?=\s) 
    (?!
      (?:[^>"']|"[^"]*"|'[^']*')*? (?<=\s)
      ValidationGroup \s*=
    )
    (?> \s+ (?:".*?"|\'.*?\'|[^>]*?)+ 
  >
    ) (?<= /> )
|
  < ([A-Za-z_:][\w:.-]*Validator)
    (?=\s) 
    (?!
      (?:[^>"']|"[^"]*"|'[^']*')*? (?<=\s)
      ValidationGroup \s*=
    )
    (?> \s+ (?:".*?"|\'.*?\'|[^>]*?)+ 
  >
    ) (?<! /> )
  .*?
  </\1 \s*>