Я думаю, это то, что вы пытались:
<asp:TextBox(?:(?!MaxLength=|>).)*/>
.
потребляет по одному символу за раз, но только после того, как предвидение определило, что это не >
или начало MaxLength=
. Обратите внимание, что вы должны исключить >
в прогнозе, или он будет продолжать искать MaxLength=
за пределами конца текущего элемента. Например, применительно к
<asp:TextBox ID="txtMisc" /><asp:TextBox MaxLength="50" />
... вы хотите, чтобы он соответствовал первому тегу, но это не так, потому что предвидение видит MaxLength=
во втором элементе. Нежадный квантификатор, такой как .*?
, не предотвратит этого. Может показаться, , что он работает правильно, но это только потому, что теги обычно появляются в отдельных строках, а .
не соответствует символам новой строки.
Версия Visual Studio будет:
\<asp\:TextBox(~(MaxLength=|\>).)*/\>
<
, >
и :
имеют специальное значение в регулярных выражениях VS и должны быть экранированы, а ~(...)
- это синтаксис VS для отрицательного взгляда.