Apache Ant: replaceregexp und HTML

Wer mit Ants replaceregexp HTML suchen und ersetzen möchte, wird recht schnell in Fehler wie

  1. Wert des Attributs “match”, das mit Elementtyp “null” verknüpft ist, darf nicht das Zeichen “<” enthalten.
  2. Öffnendes Anführungszeichen wird für Attribut “{1}” erwartet, das mit Elementtyp “id” verknüpft ist.
  3. Auf Elementtyp “replaceregexp” müssen entweder Attributspezifikationen, “>” oder “/>” folgen.

bzw deren englischer Entsprechung

  1. The value of attribute “match” associated with an element type “null” must not contain the ‘<‘ character.
  2. Open quote is expected for attribute “{1}” associated with an element type “id”.
  3. Element type “replaceregexp” must be followed by either attribute specifications, “>” or “/>”.

stoßen. Lösung:

  1. alle “<” durch &lt; ersetzen. Mit “” escapen genügt nicht.
  2. Geöffnete Anführungszeichen müssen geschlossen werden m(
  3. Alle Anführungszeichen durch “&quot;” ersetzen. Mit “” escapen genügt nicht.

PS:

  • Um mehrere Zeilen gleichzeitig zu ersetzen, muss man – etwas uneingängig – das Flag “s” setzen.
  • Um (potentiell) verschachtelte Tags (z.B. DIV) zu ersetzen, immer nicht-“greedy” arbeiten, also z.B. mit (.*?) statt mit (.*)