Я пытаюсь заменить только первое появление какого-либо текста, во-первых, изнутри онлайн-инструмента, такого как http://regexpal.com/, а затем посмотреть, работает ли это в задаче MSBUILD.RegEX - Заменить только первое вхождение текста
Я могу делать то, что я хочу в .net так:
StringBuilder sb = new StringBuilder();
sb.Append("IF @@TRANCOUNT>0 BEGIN");
sb.Append("IF @@TRANCOUNT>0 BEGIN");
sb.Append("IF @@TRANCOUNT>0 BEGIN");
Regex MyRgx = new Regex("IF @@TRANCOUNT>0 BEGIN");
string Myresult = MyRgx.Replace(sb.ToString(), "foo", 1);
Как уже упоминалось, чтобы получить эту работу в задаче MSBuild моя конечная цель. Ближайший я пришел, чтобы заменить все, кроме последнего (который по общему признанию, не близко!)
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" />
<ItemGroup>
<SourceFile Include="source.txt" />
<FileToUpdate Include="FileToUpdate.txt" />
</ItemGroup>
<Target Name="go">
<!-- a) Delete our target file so we can run multiple times-->
<Delete Files="@(FileToUpdate)" />
<!-- b) Copy the source to the version we will amend-->
<Copy SourceFiles= "@(SourceFile)"
DestinationFiles="@(FileToUpdate)"
ContinueOnError="false" />
<!-- c) Finally.. amend the file-->
<FileUpdate
Files="@(FileToUpdate)"
Regex="IF @@TRANCOUNT>0 BEGIN(.+?)"
ReplacementText="...I have replaced the first match only..."
Condition=""/>
<!-- NB The above example replaces ALL except the last one (!)-->
</Target>
</Project>
Благодаря
Я собирался сказать, что это не работает, когда я добавил в $ 2 замещающий текст , и эй престо! Что делает 2 доллара, что заставляет его работать? –
$ 1, $ 2 и т. Д. - это захваты, найденные регулярным выражением, поэтому $ 2 здесь '(. *)' - "все после моего' IF @@ TRANCOUNT> 0 BEGIN' " – Lanorkin
Большое спасибо :) [уходит, чтобы читать на снимках. ..] –