ReplaceRegExp

説明

ReplaceRegExp は、特定のディレクトリ内で正規表現を使用して、選択したファイルまたはファイルセット内の置換パターンに置き換えるためのディレクトリベースのタスクです。

出力ファイルは、既存のファイルと異なる場合にのみ書き込まれます。これにより、このタスクによって生成された変更されていないファイルに基づく不要な再構築を回避できます。ファイルが変更されたかどうかを評価するため、このタスクは 一時ディレクトリ 内にソースファイルの事前処理されたバージョンを作成します。

regexp 型マッパー と同様に、このタスクは正規表現ライブラリと org.apache.tools.ant.util.regexp.Regexp の実装をサポートする必要があります。詳細については、Regexp 型 のドキュメントを参照してください。

パラメーター

属性 説明 必須
file 正規表現を置き換えるファイル。 はい、ネストされた <fileset> が使用されていない場合
match ファイル内で一致させる正規表現パターン はい、ネストされた <regexp> が使用されていない場合
replace 正規表現の代わりにファイルに配置する置換パターン。 はい、ネストされた <substitution> が使用されていない場合
flags 正規表現を一致させる際に使用するフラグ。詳細については、Perl 5 の構文を参照してください
g : グローバル置換。見つかったすべての出現を置換します
i : 大文字と小文字を区別しない。一致に大文字と小文字を考慮しません
m : マルチライン。文字列を複数の入力行として扱い、^$ を文字列の開始と終了ではなく、各行の開始と終了として使用します。
s : シングルライン。文字列を 1 行の入力として扱い、. を使用して改行を含め、通常は一致しないすべての文字に一致します。
いいえ
byline ファイルを一括処理ではなく、1 行ずつ処理し、1 行ずつ置換を実行します (true|false)。これは、各行で正規表現の最初の出現のみを置換する場合に便利です。ファイルを全体として処理すると、これを行うのは容易ではありません。 いいえ、デフォルトは false です
encoding ファイルのエンコード。Apache Ant 1.6 以降 いいえ、デフォルトは JVM のデフォルト文字エンコードです
preserveLastModified ファイルが変更された場合でも、ファイルのタイムスタンプを保持します。Ant 1.8.0 以降 いいえ、デフォルトは false です

<replaceregexp file="${src}/build.properties"
               match="OldProperty=(.*)"
               replace="NewProperty=\1"
               byline="true"/>

プロパティ名 OldProperty の出現を NewProperty に置き換え、既存の値を保持します。ファイル ${src}/build.properties

ネストされた要素として指定されたパラメーター

このタスクは、ネストされた FileSet 要素をサポートしています。

Ant 1.8.0 以降、このタスクはネストされた要素として、ファイルシステムベースの リソースコレクション をサポートしています。

このタスクは、正規表現を指定するためのネストされた Regexp 要素をサポートしています。この要素を使用して、以前に定義された正規表現データ型のインスタンスを参照できます。

<regexp id="id" pattern="alpha(.+)beta"/>
<regexp refid="id"/>

このタスクは、置換パターンを指定するためのネストされた substitution 要素をサポートしています。この要素を使用して、以前に定義された置換パターンのデータ型のインスタンスを参照できます。

<substitution id="id" expression="beta\1alpha"/>
<substitution refid="id"/>

プロパティ名 OldProperty の出現を NewProperty に置き換え、既存の値を保持します。現在のディレクトリにある .properties で終わるすべてのファイル

<replaceregexp byline="true">
    <regexp pattern="OldProperty=(.*)"/>
    <substitution expression="NewProperty=\1"/>
    <fileset dir=".">
        <include name="*.properties"/>
    </fileset>
</replaceregexp>

すべての空白(空白、タブなど)を 1 つの空白に置き換え、行区切りはそのままにします

<replaceregexp match="\s+" replace=" " flags="g" byline="true">
    <fileset dir="${html.dir}" includes="**/*.html"/>
</replaceregexp>

その後、入力

<html>    <body>
<<TAB>><h1>    T E S T   </h1>  <<TAB>>
<<TAB>> </body></html>

に変換されます

<html> <body>
 <h1> T E S T </h1> </body></html>

作業

<replaceregexp match="\\n" replace="${line.separator}" flags="g" byline="true">
    <fileset dir="${dir}"/>
</replaceregexp>

すべての \n マーカー(\ に注意して引用符を付加)を改行に置き換えます。すると、入力

one\ntwo\nthree

に変換されます

one
two
three

改行を挿入するとファイルの構文が破損する場合があります。例えば、XML では

<root>
    <text>line breaks \n should work in text</text>
    <attribute value="but breaks \n attributes"/>
</root>