所有验证器的正则表达式,除了那些包含验证组的验证器



我试图在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中工作。

但可能梅拉莫克发布了正确答案!

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

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

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

这也可能有效。

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

最新更新