我想使用這個表達式:什麼導致這個正則表達式匹配一切?
^(\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解析器? –