我想使用这个表达式:什么导致这个正则表达式匹配一切?
^(\s+)<ProjectReference(.|\s)+?(Project2)</Name>(.|\s)+?</ProjectReference>
...定位仅此节:
<ProjectReference Include="..\..\Project2\Project2.csproj">
<Project>{6c2a7631-8b47-4ae9-a68f-f728666105b9}</Project>
<Name>Project2</Name>
</ProjectReference>
...以下文件:
what is causing this text up here to be selected??
<ProjectReference Include="..\..\Project1\Project1\Project1.csproj">
<Project>{714c6b26-c609-40a4-80a9-421bd842562d}</Project>
<Name>Project1</Name>
</ProjectReference>
<ItemGroup>
<ProjectReference Include="..\..\Project2\Project2.csproj">
<Project>{6c2a7631-8b47-4ae9-a68f-f728666105b9}</Project>
<Name>Project2</Name>
</ProjectReference>
<ProjectReference Include="..\..\Project3\Project3\Project3.csproj">
<Project>{39860208-8146-429f-a1d1-5f8ed2fd7f5f}</Project>
<Name>Project3</Name>
</ProjectReference>
<ProjectReference Include="..\..\Project4\Project4.csproj">
<Project>{58144d60-19d9-4d11-8ae6-088e03ccf874}</Project>
<Name>Project4</Name>
</ProjectReference>
<ProjectReference Include="..\..\Project5\Project5.csproj">
<Project>{33baa509-ad24-4a72-a2fc-8f297e75e90d}</Project>
<Name>Project5</Name>
</ProjectReference>
</ItemGroup>
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
在记事本++ ,它似乎最初找到了比赛,但随后在第二场比赛中继续匹配整个文档(所以它总共找到2场比赛)。我最初在我的.NET应用程序中发现了这一点,当时我的工具用一个空字符串替换了我的项目文件的全部内容,从而有效地清除了整个事情。
我已经花了一个多小时辛苦了,所以让我们来看看SE能否算出来。
更新:虽然我标志着实际工作的答案,我结束了一个不那么神奇的方法去确保没有罕见的正则表达式怪癖蔓延到我的代码后的道路为当时情况最近。
^(\s+)<ProjectReference.+?({0})\.(csproj|vbproj).*\r\n.*\r\n\s+<Name>{0}</Name>\r\n\s*</ProjectReference>
...其中{0}
是我的项目名称。虽然更详细,但这种解决方案不太可能出现过度匹配。我在我的.NET应用中使用了RegexOptions.Multiline
,这样我就可以锚定到一行的开头。
这个'(。| \ r \ n)+'。贪婪的''将捕获一切。 –
@BoristheSpider糟糕,编写我的问题时出错。我用'?'纠正了它,但它仍然在做同样的事情。我直接从Notepad ++查找窗口中复制并粘贴该正则表达式。 – oscilatingcretin
看来你想提取与'project2'相关的部分。为什么不使用xpath表达式或xml解析器? –