2012-04-23 2 views
1

Я пытался найти все валидаторов в нашем проекте в Visual Studio 2010. Это так:Regex для всех валидаторов, кроме тех, которые содержат ValidationGroup

<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="*"/> 

Я попытался с нижеследующими валидаторами без результатов:

Вы видите ошибки в них?

EDIT:

Я попытался с ниже успешно (но только на сайте 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 опубликовал правильный ответ!

ответ

1

Я построил этот VS регулярное выражение, которое, кажется, работает для первого случая:

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

Я взял вашу основную идею и искал для каждого атрибута в отдельности с выражением (:b|\n)+[a-zA-Z]+\"[^"]*". Затем я ищу кратким способом для захвата всех атрибутов и, наконец, добавил ~(ValidationGroup), чтобы предотвратить совпадение с завершением, если какой-либо из атрибутов называется ValidationGroup.

+0

Похоже, что это работает! Спасибо, я рассмотрю его более тщательно позже и, вероятно, пометьте ваш ответ как правильный :) – mrzepa

+0

Я проверил это, и он хорошо работает, мне очень нравится идея сопоставления каждого свойства по отдельности, хороший улов;) Однако я изменил часть в сопоставление имени свойства с [^ "=], поскольку, насколько я знаю, свойства могут также подчеркивать или цифры в имени, и это будет соответствовать всем. – mrzepa

+0

' (\ 'Это работает для обоих случаев. Я пробовал с другими кванторами to '[\ /] *', но не '?' и '{0,1}'. – mrzepa

0

Это может сработать.

< [A-Za-z_:][\w:.-]*Validator 
    (?=\s) 
    (?! 
     (?:[^>"']|"[^"]*"|'[^']*')*? (?<=\s) 
     ValidationGroup \s*= 
    ) 
    (?> \s+ (?:".*?"|\'.*?\'|[^>]*?)+ 
    > 
    ) (?<= />) 
| 
    < ([A-Za-z_:][\w:.-]*Validator) 
    (?=\s) 
    (?! 
     (?:[^>"']|"[^"]*"|'[^']*')*? (?<=\s) 
     ValidationGroup \s*= 
    ) 
    (?> \s+ (?:".*?"|\'.*?\'|[^>]*?)+ 
    > 
    ) (?<! />) 
    .*? 
    </\1 \s*> 
Смежные вопросы