3

我有一种情况,我需要在 VS 项目中搜索任何没有定义 MaxLength 属性的控件。

例如:

<asp:TextBox ID="txtName" runat="server" MaxLength="50" Text="Enter Name" />
<asp:TextBox ID="txtOther" MaxLength="25" runat="server" />
<asp:TextBox ID="MaxLength" runat="server" />
<asp:TextBox ID="txtMisc" runat="server" Width="100" />

有没有人建议使用正则表达式模式来查找未定义 MaxLength 的控件?

我的第一次尝试似乎有效,但充其量似乎并不完美......

<asp:TextBox.*?M(?!axLength=).*?/>

我很想看到一个更好的解决方案。

注意:Visual Studio 搜索阻塞了我上面的模式。我被迫使用不同的应用程序来实际使用这种模式进行搜索

4

2 回答 2

5

我认为这就是你想要的:

<asp:TextBox(?:(?!MaxLength=|>).)*/>

一次消耗一个字符,.但只有在前瞻确定它不是>或开始之后MaxLength=。请注意,您必须在前瞻中排除>,否则它将继续寻找MaxLength=超出当前元素的末尾。例如,当应用于

<asp:TextBox ID="txtMisc" /><asp:TextBox MaxLength="50" />

...您希望它与第一个标签匹配,但不是因为前瞻MaxLength=在第二个元素中看到。像这样的非贪婪量词.*?不会阻止这种情况的发生。看起来工作正常,但这只是因为标签通常出现在单独的行上,并且.不匹配换行符。

Visual Studio 版本将是:

\<asp\:TextBox(~(MaxLength=|\>).)*/\>

<,>并且:都在 VS 正则表达式中具有特殊含义并且必须被转义,并且~(...)是用于否定前瞻的 VS 语法。

于 2011-03-29T23:17:14.320 回答
1

试试这个......对元素内的“MaxLength”负前瞻

\<(?!.*MaxLength[^/>]*)[^/>]*/\>
于 2011-03-29T17:16:45.583 回答