1

我试图在 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发布了正确答案!

4

2 回答 2

1

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

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

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

于 2012-04-23T17:53:31.113 回答
0

这也可能奏效。

  < [A-Za-z_:][\w:.-]*Validator
    (?=\s) 
    (?!
      (?:[^>"']|"[^"]*"|'[^']*')*? (?<=\s)
      ValidationGroup \s*=
    )
    (?> \s+ (?:".*?"|\'.*?\'|[^>]*?)+ 
  >
    ) (?<= /> )
|
  < ([A-Za-z_:][\w:.-]*Validator)
    (?=\s) 
    (?!
      (?:[^>"']|"[^"]*"|'[^']*')*? (?<=\s)
      ValidationGroup \s*=
    )
    (?> \s+ (?:".*?"|\'.*?\'|[^>]*?)+ 
  >
    ) (?<! /> )
  .*?
  </\1 \s*>
于 2012-04-23T21:15:10.123 回答