3

MaxLength プロパティが定義されていないコントロールを VS プロジェクトで検索する必要がある状況があります。

例えば:

<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=|>).)*/>

は一度に 1 文字を消費しますが、それが の先頭では.ないことを先読みが判断した後でのみです。先読みで除外する必要があることに注意してください。そうしないと、現在の要素の末尾を超えて検索し続けます。たとえば、>MaxLength=>MaxLength=

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

...最初のタグと一致させたいのですが、先読みがMaxLength=2番目の要素を参照しているため、一致しません。のような貪欲でない量指定子.*?は、それが起こるのを防ぎません。正しく動作しているように見えるかもしれませんが、それはタグが通常別の行に表示され、.改行と一致しないためです。

Visual Studio のバージョンは次のようになります。

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

<>および:すべてが VS 正規表現で特別な意味を持ち、エスケープする必要があり~(...)ます。これは、否定先読みの VS 構文です。

于 2011-03-29T23:17:14.320 に答える
1

これを試してください...要素内の「MaxLength」に対する否定先読み

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