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