Поиск по регулярному выражению, который соответствует одному слову, но не другому - PullRequest
1 голос
/ 28 марта 2012
<ReportExport ID="export1" runat="server" AlertNoTests="false" PDFPageOrientation="Portrait"
            HideExcel="true" OnPDFClicked="CreatePDF" AllowPDFOptions="true" HideBulkPDFOptions="false"
            HideOrientation="true" HidePaperSize="true" MaxReportsAtOnce="250" HideTextExport="true" />

Я пытаюсь использовать функцию поиска Visual Studio с помощью регулярных выражений, чтобы найти ReportExport во всем моем решении, где свойство HideTextExport не устанавливается.Это только когда-либо определено в разметке один раз на данной странице.

Есть идеи, как найти, где существует ReportExport ... но HideTextExport не существует в тексте?

Спасибо зазаранее!

Ответы [ 2 ]

2 голосов
/ 29 марта 2012

Это работает для меня:

\<ReportExport(:Wh+~(HideTextExport):w=:q)+:Wh*/\>

:Wh+ соответствует пробелу, предшествующему имени атрибута, а :w соответствует имени, но только после ~(HideTextExport) подтверждает, что имя не является «HideTextExport»,:q соответствует значению атрибута (при условии, что значения всегда заключаются в кавычки).< и > должны быть экранированы, иначе VS Find будет рассматривать их как границы слов.

Это фактически то же самое, что регулярное выражение .NET,

<ReportExport(?:\s+(?!HideTextExport)[A-Za-z]+="[^"]+")+\s*/>
0 голосов
/ 28 марта 2012

Прежде всего, необходимо установить Инструменты повышения производительности в Visual Studio (через Инструменты-> Менеджер расширений) и использовать регулярное выражение .net вместо устаревшего регулярного выражения, поставляемого из коробки для Visual Studio Find.

При этом пользователь может использовать этот шаблон регулярных выражений (если в инструментах повышения производительности включена однострочная функция для обработки диапазона строк для элемента):

(ReportExport.+?HideTextExport="false")

Это вернет все reportexports, где его ложь, и можно настроить регулярное выражение, чтобы изменить его, чтобы заменить ложь на истину.

Но ... если HideTextExport отсутствует, это делает регулярное выражение плохим выбором для поиска этого элемента, потому что неуверенность в расположении атрибута делает. * Или. + Слишком жадным и заканчивает сообщением о ложных срабатываниях при попытке найти пропущенный текст в совпадении.

Обобщенный способ сказать, что регулярное выражение находит шаблоны, и это его работа, но требуется лексический анализ, чтобы найти недостающие шаблоны, когда регулярное выражение просто не может.

...