2

antを使ってスペースを削除する方法が見つかりません。(私はトリムを意味するのではなく、〜から削除することを意味します)

あるプロジェクトを別のプロジェクトと少し変えたいと思います。

例えば:

以下のコードがあります。

.... doSomeThing;

//#removeStart

NotReleasedObject nro = new NotReleasedObject();
nro.doSomeThing();

//removeEnd#

....doAnyThing..

簡単にわかるように、からを削除したいと思い//#removeStartます//removeEnd#。どれだけのコードが書き込まれるかはわかりませんが、これら2つのタグ内のすべてのコードを削除する必要があります。1//#removeStart ... //removeEnd#つのJavaファイルに複数のコードが含まれる場合があります。

これが私のテストreplaceregexpコードです:

<replaceregexp flags="s" replace="" byline="false" encoding="utf-8">
        <regexp pattern="//#removeStart.*//removeEnd#"/>
        <fileset dir="${extern-source-path}"/>
</replaceregexp>

------ source for victim.

//#removeStart
space 1
//removeEnd#

something

//#removeStart
space 2
//removeEnd#

現在、私のコードは正しく機能していません。フラグ-sは機能しますが、1つのファイルに複数の一致がある場合、スペース1からスペース2までのすべてが失われます。(something!を含む)私が実際に欲しいのはスペース1、2がなくなったことですが、そのsomethingままにしておく必要があります。

各オカレンスを1つずつ置き換えるように修正するにはどうすればよいですか?

4

2 に答える 2

2

明示的な文字が一致しません。実際のテキストがまたはのいずれかであるのに対し、正規表現は言い//##ExternRemoveます。それが実際の正規表現である場合、明示的な文字は完全に同じである必要があります。また、改行と一致しないため、具体的に含める必要があります(例)。//##removeStart//#removeStart.[\s\S]*

最後に、この一致のペアが複数ある可能性がある場合は、一致を欲張りでないものにする必要があります(多くの場合、これはを追加することによって行われ?ます)。まとめると、おそらく次のような正規表現が必要になります。

//##?removeStart[\s\S]*?//removeEnd##?

これは、1-2#で行を開始できるようにし、フレーズが常にremoveStart/になることを前提としていますremoveEnd。それ以外の場合は、オプションを追加できます。

//##?(?:removeStart|ExternRemove)[\s\S]*?//(?:removeEnd|ExternEnd)##?

繰り返しますが、これはキャプチャされない一致のアリの用語に依存します。

于 2012-08-23T03:43:49.813 に答える
0

私はこれでうまくやった:

foo.txt

This is a test
--->
###start remove
Blah blah blah
Yadda yadda yadda
###end remove
--->
End of my test

build.xml

<project>
    <replaceregexp file="foo.txt"
        flags="s"
        match="###start remove.+###end remove"
        replace=""/>
</project>

結果のfoo.txt

This is a test
--->

--->
End of my test

正規表現が正しくないようです。あなたは正規表現が言って##ExternRemove.*いますが、あなたのファイルは//#removeStart代わりに持っています。

私はファイルを直接変更するのが嫌いなので、これをコピーまたは連結で実行できるかどうかを確認していました。残念ながら、私はこれを行う方法を見つけていませんでした。

于 2012-08-23T04:12:36.520 に答える