| <!DOCTYPE html> |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| https://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| <html lang="en"> |
| |
| <head> |
| <link rel="stylesheet" type="text/css" href="../stylesheets/style.css"> |
| <title>ReplaceRegExp Task</title> |
| </head> |
| <body> |
| |
| <h2 id="replaceregexp">ReplaceRegExp</h2> |
| <h3>Description</h3> |
| <p><code>ReplaceRegExp</code> is a directory based task for replacing the occurrence of a given |
| regular expression with a substitution pattern in a selected file or set of files.</p> |
| |
| <p>The output file is only written if it differs from the existing |
| file. This prevents spurious rebuilds based on unchanged files which |
| have been regenerated by this task. In order to assess whether a file |
| has changed, this task will create a pre-processed version of the |
| source file inside of the <a href="../running.html#tmpdir">temporary |
| directory</a>.</p> |
| |
| <p>Similar to <a href="../Types/mapper.html#regexp-mapper">regexp type mappers</a> this task needs a |
| supporting regular expression library and an implementation |
| of <code class="code">org.apache.tools.ant.util.regexp.Regexp</code>. See details in the |
| documentation of the <a href="../Types/regexp.html#implementation">Regexp Type</a>.</p> |
| |
| <h3>Parameters</h3> |
| <table class="attr"> |
| <tr> |
| <th scope="col">Attribute</th> |
| <th scope="col">Description</th> |
| <th scope="col">Required</th> |
| </tr> |
| <tr> |
| <td>file</td> |
| <td>file for which the regular expression should be replaced.</td> |
| <td>Yes, unless nested <code><fileset></code> is used</td> |
| </tr> |
| <tr> |
| <td>match</td> |
| <td>The regular expression pattern to match in the file(s)</td> |
| <td>Yes, unless nested <code><regexp></code> is used</td> |
| </tr> |
| <tr> |
| <td>replace</td> |
| <td>The substitution pattern to place in the file(s) in place of the regular expression.</td> |
| <td>Yes, unless nested <code><substitution></code> is used</td> |
| </tr> |
| <tr> |
| <td>flags</td> |
| <td>The flags to use when matching the regular expression. For more information, consult the |
| Perl 5 syntax<br/> |
| <q>g</q> : Global replacement. Replace all occurrences found<br/> |
| <q>i</q> : Case Insensitive. Do not consider case in the match<br/> |
| <q>m</q> : Multiline. Treat the string as multiple lines of input, using <q>^</q> |
| and <q>$</q> as the start or end of any line, respectively, rather than start or end of |
| string.<br/> |
| <q>s</q> : Singleline. Treat the string as a single line of input, using <q>.</q> to match |
| any character, including a newline, which normally, it would not match. |
| </td> |
| <td>No</td> |
| </tr> |
| <tr> |
| <td>byline</td> |
| <td>Process the file(s) one line at a time, executing the replacement on one line at a time |
| (<q>true|false</q>). This is useful if you want to only replace the first occurrence of a |
| regular expression on each line, which is not easy to do when processing the file as a |
| whole.</td> |
| <td>No; defaults to <q>false</q></td> |
| </tr> |
| <tr> |
| <td>encoding</td> |
| <td>The encoding of the file. <em>since Apache Ant 1.6</em></td> |
| <td>No; defaults to default JVM character encoding</td> |
| </tr> |
| <tr> |
| <td>preserveLastModified</td> |
| <td>Keep the file timestamp(s) even if the file(s) is(are) modified. <em>since Ant |
| 1.8.0</em>.</td> |
| <td>No; defaults to <q>false</q></td> |
| </tr> |
| </table> |
| <h3>Examples</h3> |
| <pre> |
| <replaceregexp file="${src}/build.properties" |
| match="OldProperty=(.*)" |
| replace="NewProperty=\1" |
| byline="true"/></pre> |
| <p>replaces occurrences of the property name <q>OldProperty</q> with <q>NewProperty</q> in a |
| properties file, preserving the existing value, in the file <samp>${src}/build.properties</samp></p> |
| |
| <h3>Parameters specified as nested elements</h3> |
| <p>This task supports a nested <a href="../Types/fileset.html">FileSet</a> element.</p> |
| <p><em>Since Ant 1.8.0</em>, this task supports any filesystem |
| based <a href="../Types/resources.html#collection">resource collections</a> as nested elements.</p> |
| <p>This task supports a nested <a href="../Types/regexp.html">Regexp</a> element to specify the |
| regular expression. You can use this element to refer to a previously defined regular expression |
| datatype instance.</p> |
| |
| <pre> |
| <regexp id="id" pattern="alpha(.+)beta"/> |
| <regexp refid="id"/></pre> |
| |
| <p>This task supports a nested <code>substitution</code> element to specify the substitution |
| pattern. You can use this element to refer to a previously defined substitution pattern datatype |
| instance.</p> |
| |
| <pre> |
| <substitution id="id" expression="beta\1alpha"/><br/> |
| <substitution refid="id"/></pre> |
| |
| <h3>Examples</h3> |
| |
| <p>Replace occurrences of the property name <q>OldProperty</q> with <q>NewProperty</q> in a |
| properties file, preserving the existing value, in all files ending in <samp>.properties</samp> in |
| the current directory:</p> |
| <pre> |
| <replaceregexp byline="true"> |
| <regexp pattern="OldProperty=(.*)"/> |
| <substitution expression="NewProperty=\1"/> |
| <fileset dir="."> |
| <include name="*.properties"/> |
| </fileset> |
| </replaceregexp></pre> |
| |
| <p>Replace all whitespaces (blanks, tabs, etc) by one blank remaining the line separator:</p> |
| <pre> |
| <replaceregexp match="\s+" replace=" " flags="g" byline="true"> |
| <fileset dir="${html.dir}" includes="**/*.html"/> |
| </replaceregexp></pre> |
| <p>Then, input</p> |
| <pre> |
| <html> <body> |
| <<TAB>><h1> T E S T </h1> <<TAB>> |
| <<TAB>> </body></html></pre> |
| <p>is converted to</p> |
| <pre> |
| <html> <body> |
| <h1> T E S T </h1> </body></html></pre> |
| |
| <p>The task</p> |
| <pre> |
| <replaceregexp match="\\n" replace="${line.separator}" flags="g" byline="true"> |
| <fileset dir="${dir}"/> |
| </replaceregexp></pre> |
| <p>replaces all <q>\n</q> markers (beware the quoting of the backslash) by a line break. Then, |
| input</p> |
| <pre>one\ntwo\nthree</pre> |
| <p>is converted to</p> |
| <pre> |
| one |
| two |
| three</pre> |
| |
| <p>Beware that inserting line breaks could break file syntax. For example in XML:</p> |
| <pre> |
| <root> |
| <text>line breaks \n should work in text</text> |
| <attribute value="but breaks \n attributes"/> |
| </root></pre> |
| |
| </body> |
| </html> |