我遇到一种情况,我需要在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搜索在我上面的模式中窒息。我被迫使用不同的应用程序来实际使用此模式进行搜索
答案 0 :(得分:5)
我认为这就是你想要的:
<asp:TextBox(?:(?!MaxLength=|>).)*/>
.
一次消耗一个字符,但只有在前瞻确定它不是>
或MaxLength=
的开头之后。请注意,必须在前瞻中排除>
,否则它将继续在当前元素的末尾查找MaxLength=
。例如,应用于
<asp:TextBox ID="txtMisc" /><asp:TextBox MaxLength="50" />
...您希望它与第一个标记匹配,但它不会,因为前瞻在第二个元素中看到MaxLength=
。像.*?
这样的非贪婪量词不会阻止这种情况发生。它可能似乎就像它正常工作一样,但这只是因为标签通常出现在单独的行上,.
与新行不匹配。
Visual Studio版本将是:
\<asp\:TextBox(~(MaxLength=|\>).)*/\>
<
,>
和:
在VS正则表达式中都有特殊含义,必须进行转义,~(...)
是VS前瞻性的语法。
答案 1 :(得分:1)
尝试这个......元素
中“MaxLength”的负面预测\<(?!.*MaxLength[^/>]*)[^/>]*/\>