2012-04-23 57 views
1

我試圖找到我們的項目都驗證器在Visual Studio 2010中的那些都是這樣的:的正則表達式所有驗證除了那些包含的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="*"/> 

我曾嘗試與下面驗證器沒有結果:

(\<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發佈了正確的答案!

回答

1

我建這個VS正則表達式,這似乎對於第一種情況的工作:

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

我把你的基本思想,並尋找與表達(:b|\n)+[a-zA-Z]+\"[^"]*"每個單獨的屬性。然後我搜索倍數以獲取所有屬性,最後添加~(ValidationGroup)以防止匹配從任何屬性命名爲ValidationGroup時完成。

+0

它看起來像它的作品!謝謝,我會稍後仔細研究它,並可能將您的答案標記爲正確:) – mrzepa 2012-04-23 18:19:47

+0

我檢查了它,它運行良好,我非常喜歡分別匹配每個屬性的想法,很好的捕獲;)但是,我更改了部分匹配屬性名稱[^「=],因爲據我所知屬性可能也有下劃線或數字的名字,這一個將匹配的一切。 – mrzepa 2012-04-23 19:49:54

+0

'(\ '這個適用於這兩種情況,到'[\ /] *',但也不是'?',也不是'{0,1}'工作 – mrzepa 2012-04-23 20:01:48

0

這也可以。

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