anchor.diff:   2. It's safest to use single quotes for the second argument, otherwise you need to escape the '$' in group substitutions, i.e. `"\$1\$2"`
   
   The first is a minor inconvenience, but slashy strings have the advantage that you don't have to escape backslash ('\') characters in the regular expression. The second issue stems from Groovy's support for embedded expressions using `${ }` syntax in double-quoted and slashy strings.
  -==== 
  +====
   
   The closure syntax for `rename()` is straightforward and can be used for any requirements that simple regular expressions can't handle. You're given the name of a file and you return a new name for that file, or `null` if you don't want to change the name. Do be aware that the closure will be executed for every file that's copied, so try to avoid expensive operations where possible.
   
  
positive.code:  * filter them (using api:org.gradle.api.file.FileTree#matching(org.gradle.api.Action)[] and Ant-style patterns)
   * merge them
  
  You can also traverse file trees using the api:org.gradle.api.file.FileTree#visit(org.gradle.api.Action)[] method. All of these techniques are demonstrated in the following example: 
  
  ++++
  <sample id="fileTrees" dir="userguide/files/fileTrees" title="Using a file tree">
  
negative.code: You can find all the possible archive task properties in the API documentation for api:org.gradle.api.tasks.bundling.AbstractArchiveTask[], but we have also summarized the main ones here:
  
  `archiveName` — `String`, default: `__baseName__-__appendix__-__version__-__classifier__.__extension__`::
  The complete file name of the generated archive. If any of the properties in the default value are empty, their '-' separator is dropped.
  
  `archivePath` — `File`, _read-only_, default: `__destinationDir__/__archiveName__`::
  The absolute file path of the generated archive.
  