正则表达式搜索匹配一个词而不是另一个词

时间:2012-03-28 17:44:53

标签: regex visual-studio-2010 regex-negation

<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的查找功能使用正则表达式在我的整个解决方案中查找未设置HideTextExport属性的ReportExport。这只在给定页面上的标记中定义过一次。

关于如何找到ReportExport存在位置的任何想法......但文本中不存在HideTextExport?

提前致谢!

2 个答案:

答案 0 :(得分:2)

这对我有用:

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

:Wh+匹配属性名称前面的空格,:w匹配名称,但仅在~(HideTextExport)确认名称不是“HideTextExport”之后。 :q匹配属性的值(假设始终引用值)。必须对<>进行转义,否则VS Find会将其视为字边界。

这与.NET正则表达式实际上相同,

<ReportExport(?:\s+(?!HideTextExport)[A-Za-z]+="[^"]+")+\s*/>

答案 1 :(得分:0)

首先应该将Productivity Power tools安装到Visual Studio(通过工具 - >扩展管理器)并使用.net正则表达式而不是Visual Studio Find提供的过时的正则表达式。

用户可以使用这种正则表达式模式(如果生产力电动工具打开单线来处理元素的行间距):

(ReportExport.+?HideTextExport="false")

这将返回所有reportexports,其中false和可以调整正则表达式以更改它以将false替换为true。

但是......如果缺少HideTextExport,这会使正则表达式成为用于查找此元素的不良选择,因为该属性位置的不确定性使。*或。+过于贪婪并在尝试时结束报告误报在匹配中找到缺少的文本。

一种普遍的说法是,正则表达式找到模式,这是它的工作,但它需要词汇分析来找到正则表达式根本无法找到的缺失模式。