我试图在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*>