Beispiele für das Suchen & Ersetzen Werkzeug

Zeichenketten in vielen Dateien in kurzer Zeit anpassen.

Änderungen in mehreren Dateien können Sie über das Werkzeug "Suchen und Ersetzen" auf Knopfdruck vornehmen. Hierfür steht Ihnen in jedem Projekt (Inhaltsprojekt, Assets, Global-Projekt) das Werkzeug zur Verfügung und beschränkt sich dort auf dieses Projekt.

Der Einsatz von regulären Ausdrücken beim Suchen gibt Ihnen zusätzlich eine sehr mächtige Funktion an die Hand, die entsprechende Sorgfalt mit dem Umgang dieses Werkzeuges erfordert. Beachten Sie hierzu die Hinweise am Ende des Artikels. Dort finden Sie auch Links zu Online-Tools, über welche reguläre Ausdrücke getestet werden können.

Beispiele für "Suchen und Ersetzen"

Für die "Suchen und Ersetzen" Beispiele empfehlen wir folgende Schrittfolge:

  1. Backup / Sicherung des zu durchsuchenden Verzeichnisses anlegen, um bei Problemen über ein Wiederherstellen des Backups schnell wieder den Stand vor dem Ersetzen herstellen zu können
  2. gewünschtes Projekt (z.B. /de) aufrufen und unter den Werkzeuge "Suchen und Ersetzen" auswählen
  3. Verzeichnis über "Suchen in" auswählen, zu dem Dateien rekursiv durchsucht und ersetzt werden soll
  4. ggf. die Dateitypen (z.B. php) angeben
  5. wenn Groß-/Kleinschreibung berücksichtigt werden soll, den Parameter aktivieren
  6. wenn im Suchen-Feld reguläre Ausdrücke verwendet werden, den Parameter hierfür aktivieren.
  7. über den Button "Nur Suchen" kann getestet werden, welche Dateien vom Vorgang erfasst werden; "Suchen und Ersetzen" führt den Vorgang schliesslich durch

Beispiel 1: Beschreibung (wd:description) mit regulären Ausdrücken rekursiv ändern

Beachten Sie beim "Suchen und Ersetzen" der Beschreibung (wd:description), dass dieses Tag in einer Datei mehrfach vorkommen kann. Z.B. wird das Tag bei Dateivorlagen zusätzlich zu den Metadaten (wd:meta) auch in den Templateinformationen (wd:asTemplate) verwendet!

Einzeltags für die Beschreibung (wd:description) in Dateien durch eine vordefinierte Beschreibung über reguläre Ausdrücke suchen und ersetzen:

Suchen nach:

<wd:description\s*/>

Ersetzen durch:

<wd:description>Ihre Beschreibung</wd:description>

Einzeltags und normale leere Tags für die Beschreibung (wd:description) in Dateien durch eine vordefinierte Beschreibung über reguläre Ausdrücke suchen und ersetzen:

Suchen nach:

(<wd:description\s*/>|<wd:description></wd:description>)

Ersetzen durch:

<wd:description>Ihre Beschreibung</wd:description>

Einzeltags und normale Tags (mit/ohne Inhalt) für die Beschreibung (wd:description) in Dateien durch eine vordefinierte Beschreibung über reguläre Ausdrücke suchen und ersetzen:

Suchen nach:

(<wd:description\s*/>|<wd:description>.*?</wd:description>)

Ersetzen durch:

<wd:description>Ihre Beschreibung</wd:description>

Beispiel 2: Schlüsselwörter (wd:keywords) mit regulären Ausdrücken ersetzen

Suchen nach:

<wd:keywords>(\r\n|.*?)</wd:keywords>

Ersetzen durch:

<wd:keywords>ihre, keywords</wd:keywords>

Beispiel 3: Cache-Einstellung mit regulären Ausdrücken auf Erben einstellen

Suchen nach:

<wd:cache[^>]+expires="(\d+|)"[^>]*\/>

Ersetzen durch:

<wd:cache expires="{wGetValueOfDefaultExtension()}"/>

Danach kann dann z.B. in den Standard-Dateieinstellungen vom Projektverzeichnis der Cache wie gewünscht eingestellt werden.
Beachten Sie, dass eine Datei-Cache bei Seiten mit Formularen nicht gesetzt sein sollte bzw. zumindest das Formular ohne Cache aufgerufen wird (wie in der jeweils aktuellen BASE umgesetzt (Framework-Funktion: wOutput::loadWithoutCache)).
Weiterhin sollten Sie den Datei-Cache auch nicht in folgenden Dateien setzen, sondern deaktivieren:

  • Suche-Seite
  • Seite empfehlen Seite
  • Kontakt- und Danke-Seite (auch andere Formulare)
  • RSS-Seite
  • Google-Sitemap
  • Newsletter-Formular Seiten
  • Errordocs-Seiten

Beispiel 4: Workflow über reguläre Ausdrücke auf Erben einstellen

Suchen nach:

<wd:workflow[^>]+>

Ersetzen durch:

<wd:workflow path="{wGetValueOfDefaultExtension()}" groupExecute="{wGetValueOfDefaultExtension()}" deleteAfterApprove=""/>

Nach erfolgreichem Ersetzen können Sie in den Standard-Dateieinstellungen des Inhaltsprojektes einen Workflow hinterlegen, der dann von den Dateien geerbt wird, die entsprechend eingestellt sind.
Ggf. prüfen Sie, ob eventuell Dateien bestehen, die überhaupt kein workflow-Tag enthalten und setzen dies dort entsprechend.

Beispiel 5: Versionsnummer über reguläre Ausdrücke auf 1 zurücksetzen

Suchen nach:

<wd:version value="\d+"/>

Ersetzen durch:

<wd:version value="1"/>

Beispiel 6: Sprachknoten (nodeID) in Dateien und Verzeichniseinstellung zurücksetzen

Suchen nach:

<wd:language nodeID="[^"]+"/>

Ersetzen durch:

<wd:language nodeID=""/>

Zusätzlich zum Aktivieren der Option für reguläre Ausdrücke verwenden, muss auch die Option zum Einbeziehen von Systemverzeichnissen aktiviert sein. Diesen Vorgang gibt es übrigens auch als Makro in der Suchen & Ersetzen Maske.

Beim erneuten Aufruf eines Verzeichnisses bzw. einer Datei werden die Sprachverknüpfungen i.d.R. neu geschrieben.

Beispiel 7: Datei hinzufügen Button mit regulären Ausdrücken ersetzen/löschen

Suchen nach:

<wd:item[^>]+type="button.createFile".*?</wd:item>[\n\r\s\t]*(<wd:item[^>]+type="list.standard".*?<wd:fragment id="listtemplate" type="src.file">/[IHR-LAYOUT-PROJEKT]/wGlobal/layout/templates/lists/upload.wFilelist.php)

Ersetzen durch:

$1

Beispiel 8: Mit regulären Ausdrücken mehrere wd:object Tags ausfindig machen

NUR Suchen nach:

<wd:object.*<wd:object

KEIN Ersetzen

Beispiel 9: Bildergalerie 1.x auf Weblic-Version 2.x anpassen

Wenn ein Projekt z.B. über Neuinstallation von BASE 1.x auf 2.x umgestellt wird, oder Weblics® 2.x in BASE 1.x eingesetzt werden sollen, ist ggf. das Anpassen der 1.x Bildergalerien erforderlich. Am Beispiel der Fancybox Bildergalerie erhalten Sie nachfolgend ein Beispiel, um eine existierende 1.x Bildergalerie (vom Typ Fancybox) auf die Bildergalerie-Variante 2.x (Typ Fancybox) umzustellen (Pfade bitte individuell berücksichtigen).

Suchen nach:

<wd:fragment id="listtemplate" type="src.default">/[IHR-LAYOUT-PROJEKT]/wGlobal/layout/templates/lists/galleryFancybox.wFilelist.php</wd:fragment>

Ersetzen durch:

<wd:fragment id="listtemplate" type="src.default">/[IHR-LAYOUT-PROJEKT]/wGlobal/layout/templates/lists/gallery.wFilelist.php</wd:fragment>
<wd:fragment id="layout" type="char.default">2</wd:fragment>

Beispiel 10: Fehlerhafte Dokumentenerweiterung anpassen

Die BASE wurde zum Assets-Verzeichnis eine kurze Zeit lang mit einer fehlerhaften Dokumentenerweiterung (wdExtension.php) für Binärdateien ausgeliefert (wd:edit doppelt, fehlendes wd:editExt Tag). Beim Öffnen der Bearbeitung erhalten Sie in solchen Fällen die Meldung "Das Edit Template dieser Datei existiert nicht!".
Um dies zu korrigieren, können Sie folgende Daten für Suchen und Ersetzen (in z.B. /de-wAssets/ ) verwenden (Systemverzeichnisse einbeziehen!):

Suchen nach:

  <wd:templates>
    <wd:master path="{wGetValueOfDefaultExtension()}"/>       
    <wd:edit path="{wGetValueOfDefaultExtension()}"/>
    <wd:edit path="{wGetValueOfDefaultExtension()}"/>    
    <wd:view path="{wGetValueOfDefaultExtension()}"/>
  </wd:templates>

Ersetzen durch:

  <wd:templates>
    <wd:master path="{wGetValueOfDefaultExtension()}"/>
    <wd:edit path="{wGetValueOfDefaultExtension()}"/>
    <wd:view path="{wGetValueOfDefaultExtension()}"/>
    <wd:editExt path="{wGetValueOfDefaultExtension()}"/>
  </wd:templates> 

Beispiel 11: Jahreszahlen ersetzen und Text davor merken

Soll z.B. in der Beschreibung von Dateien eine Jahreszahl geändert werden, aber der Text vor der Jahreszahl beibehalten werden, müssen Sie das hinsichtlich der Rückreferenzierung entsprechend im regulären Ausdruck berücksichtigen (siehe auch: php.net: preg_replace).
Nachfolgend ein Beispiel, um das Jahr 1972 in 1977 zu ändern (Option "Regulärer Ausdruck verwenden" muss aktiviert sein).

Suchen nach:

(<wd:description>.*)1972

Ersetzen durch:

${1}1977

Beispiel 12: Überschriften-Level innerhalb Inhaltsbox ändern

Zu Überschriften-Elementen soll das Level geändert werden.
Nachfolgend ein Beispiel, um aus dem Level 4 einer Überschrift ein Level 2 zu machen (Option "Regulärer Ausdruck verwenden" muss aktiviert sein). Wenn der Text der Überschrift unterschiedlich ist, setzen Sie hier auch entsprechende reguläre Ausdrücke ein.

Suchen nach:

<wd:fragment id="title" type="char\.text">Unternehmen<\/wd:fragment>(\s+)<wd:fragment id="display" type="char\.display">h4<\/wd:fragment>

Ersetzen durch:

<wd:fragment id="title" type="char.text">Unternehmen</wd:fragment>$1<wd:fragment id="display" type="char.display">h2</wd:fragment>

Beispiel 13: Navigations-ID mit regulären Ausdrücken auf Erben einstellen

Suchen nach:

<wd:navpoint[^>]+>

Ersetzen durch:

<wd:navpoint path="{wGetValueOfDefaultExtension()}" id=""/>

Prüfen Sie am besten mit der "Nur Suchen" Funktion, welche Dateien alle erfasst werden. Wenn Sie "Zeilen anzeigen" aktiviert haben, können Sie zudem kontrollieren, wie die aktuelle Einstellung zu einer Seite gesetzt ist.

Beispiel 14: Link-Element mit zurück-Link auf zurück-Link Element umstellen

Sofern Sie das normale Link-Element für das Setzen eines zurück-Links verwendet haben und dies auf das spezielle Weblic® / Element "Zurück-Link" umstellen wollen, können Sie dies über dieses Beispiel umstellen (Option "Regulärer Ausdruck verwenden" muss aktiviert sein).

Suchen nach:

<wd:item[^>]+type="link.standard".*?<a href="javascript:history.back\(\);"\s+title="Zurück">zurück<\/a>.*?<\/wd:item>

Ersetzen durch:

<wd:item type="link.back" uid="3bccc5aec50c30b3f9c359d76116e32e">
  <wd:fragment id="text" type="char.text"/>
  <wd:fragment id="link" type="char.default"/>
</wd:item>

Wichtige Hinweise

  •  Legen Sie vor jedem Suchen/Ersetzen Vorgang ein Backup des betroffenen Verzeichnisses an!
  • Es kann keine Gewähr für ein erfolgreiches Ersetzen übernommen werden!
  • In den einschlägigen Dokumentationen zu regulären Ausdrücken finden Sie weitere Beispiele und Einsatzmöglichkeiten.
  • Ab PHP 7.3x muss bei regulären Ausdrücken der Bindestrich auch escaped werden!
    z.B. anstatt: preg_match('/[\w-.]+/', '')
    dann wie folgt: preg_match('/[\w\-.]+/', '')

 

FAQs
Wofür ist das Werkzeug „Suchen und Ersetzen“ gedacht?
Mit dem Werkzeug „Suchen und Ersetzen“ können Zeichenketten in vielen Dateien in kurzer Zeit angepasst werden. Änderungen lassen sich dabei über das Werkzeug in mehreren Dateien über „Suchen und Ersetzen“ durchführen und sind auf das jeweilige Projekt beschränkt (Inhaltsprojekt, Assets, Global-Projekt).
In welchen Projekten steht „Suchen und Ersetzen“ zur Verfügung?
Das Werkzeug steht in jedem Projekt zur Verfügung: im **Inhaltsprojekt**, im **Assets**-Projekt sowie im **Global-Projekt**. Es wirkt jeweils nur innerhalb des gewählten Projekts.
Kann ich in „Suchen und Ersetzen“ reguläre Ausdrücke verwenden?
Ja. Beim Suchen mit **regulären Ausdrücken** erhalten Sie eine sehr mächtige Funktion, die aber Sorgfalt im Umgang erfordert. Hinweise und Links zum Testen regulärer Ausdrücke finden sich am Ende des Artikels.
Welche allgemeine Schrittfolge wird für Beispiele empfohlen?
Empfohlene Schrittfolge: 1) **Backup/Sicherung** des zu durchsuchenden Verzeichnisses anlegen. 2) Gewünschtes **Projekt** aufrufen und unter **Werkzeuge** „Suchen und Ersetzen“ wählen. 3) **Verzeichnis** über „Suchen in“ auswählen (rekursiver Zugriff). 4) Ggf. **Dateitypen** angeben (z.B. php). 5) Falls benötigt: Option für **Groß-/Kleinschreibung** aktivieren. 6) Falls benötigt: Option **„Regulärer Ausdruck verwenden“** aktivieren. 7) Erst **„Nur Suchen“** verwenden (Test der Treffer), dann **„Suchen und Ersetzen“** durchführen.
Warum sollte vor „Suchen und Ersetzen“ ein Backup angelegt werden?
Vor jedem Vorgang wird ein **Backup des betroffenen Verzeichnisses** empfohlen, da keine Gewähr für ein erfolgreiches Ersetzen übernommen werden kann und man im Problemfall schnell zum vorherigen Stand zurückkehren möchte.
Wie kann ich über „Nur Suchen“ prüfen, welche Dateien betroffen sind?
Nutzen Sie die Option **„Nur Suchen“**, um vorher zu testen, welche Dateien/ Treffer vom Vorgang erfasst würden. So können Sie vor dem endgültigen Ersetzen die Ergebnisse kontrollieren.
Wie gehe ich beim Ersetzen von „wd:description“ in Dateien vor?
Beachten Sie: Das Tag **„wd:description“** kann in einer Datei mehrfach vorkommen (z.B. in Dateivorlagen zusätzlich zu den Metadaten „wd:meta“ auch in Templateinformationen „wd:asTemplate“). Das Vorgehen erfolgt je nach Ziel über reguläre Ausdrücke, z.B.: - Einzeltags wie <code class="codeInline"><wd:description\s*/></code> ersetzen. - Einzeltags und leere Tags kombinieren. - Tags mit Inhalt ersetzen, z.B. über <code class="codeInline">(<wd:description\s*/>|<wd:description>.*?</wd:description>)</code>.
Wie kann ich „wd:keywords“ mithilfe regulärer Ausdrücke ersetzen?
Beispiel: Mit aktivierter Option **reguläre Ausdrücke verwenden** kann das Muster <code class="codeInline">(<wd:keywords>(\r\n|.*?)</wd:keywords>)</code> bzw. der relevante Suchausdruck verwendet und durch einen neuen Keywords-Block ersetzt werden, z.B. <code class="codeInline">ihre, keywords</code> innerhalb von <code class="codeInline"><wd:keywords>...</wd:keywords></code>.
Wie kann ich die Cache-Einstellung per „Suchen und Ersetzen“ setzen oder ändern?
Über ein Beispiel mit regulären Ausdrücken wird ein bestehendes <code class="codeInline"><wd:cache ... /></code> angepasst/ersetzt, z.B. so, dass <code class="codeInline">expires="{wGetValueOfDefaultExtension()}"</code> verwendet wird. Wichtig: **Datei-Cache** sollte bei Seiten mit Formularen nicht gesetzt werden (Formular ohne Cache aufrufen) und nicht in folgenden Dateien: - Suche-Seite - Seite empfehlen Seite - Kontakt- und Danke-Seite (auch andere Formulare) - RSS-Seite - Google-Sitemap - Newsletter-Formular Seiten - Errordocs-Seiten
Was passiert nach erfolgreichem Ersetzen von „wd:workflow“-Tags?
Nach dem Ersetzen kann in den **Standard-Dateieinstellungen** des Inhaltsprojektes ein Workflow hinterlegt werden. Dann werden die Dateien entsprechend „geerbt“, die die entsprechenden Einstellungen/Tags enthalten. Es wird empfohlen ggf. zu prüfen, ob Dateien existieren, die **kein** „workflow“-Tag enthalten, und diese dann entsprechend zu setzen.
Wie kann ich eine Versionsnummer in „wd:version“ auf 1 zurücksetzen?
Beispielhaft kann mit regulären Ausdrücken der Wert einer <code class="codeInline"><wd:version value="..."></code> Instanz ersetzt werden, z.B. <code class="codeInline">value="\d+"</code> durch <code class="codeInline">value="1"</code>.
Wie kann ich „nodeID“ in „wd:language“ zurücksetzen?
Mit regulärem Ausdruck kann z.B. <code class="codeInline">nodeID="[^"]+"</code> durch <code class="codeInline">nodeID=""</code> ersetzt werden. Zusätzlich muss die Option **„Systemverzeichnisse einbeziehen“** aktiviert sein. Der Vorgang wird auch als **Makro** in der Suchen-&-Ersetzen-Maske beschrieben. Beim erneuten Aufruf von Verzeichnissen/Dateien werden die Sprachverknüpfungen i.d.R. neu geschrieben.
Wie kann ich bei einem Such/Ersetzen-Vorgang gezielt nur suchen, aber nicht ersetzen?
Nutzen Sie ein Beispiel, bei dem **nur „Suchen“** konfiguriert ist und **kein Ersetzen** erfolgt. Dadurch können Sie Treffer nur ermitteln (z.B. um mehrere <code class="codeInline">wd:object</code>-Tags aufzuspüren).
Wie kann ich eine Bildergalerie-Version (z.B. Fancybox 1.x auf 2.x) anpassen?
Durch Ersetzen der verwendeten Ressourcen/Fragmente und ggf. Setzen zusätzlicher Werte. Im Beispiel wird der <code class="codeInline">src.default</code>-Pfad von <code class="codeInline">galleryFancybox.wFilelist.php</code> auf <code class="codeInline">gallery.wFilelist.php</code> geändert und zusätzlich ein Fragment für den Layout-/Typ-Wert auf <code class="codeInline">2</code> gesetzt. Pfade sollten dabei individuell berücksichtigt werden.
Wie korrigiere ich eine fehlerhafte Dokumentenerweiterung (wdExtension.php) bei Assets-Templates?
Wenn beim Öffnen der Bearbeitung die Meldung „Das Edit Template dieser Datei existiert nicht!“ erscheint, kann das durch einen „Suchen und Ersetzen“-Vorgang in z.B. <code class="codeInline">*/de-wAssets/*</code> korrigiert werden (Systemverzeichnisse einbeziehen). Das Beispiel ersetzt dabei den fehlenden Teil durch das Hinzufügen eines passenden <code class="codeInline"><wd:editExt .../></code>-Tags innerhalb des <code class="codeInline"><wd:templates></code>-Blocks.
Wie kann ich beim Ersetzen von Jahreszahlen den Text davor beibehalten?
Indem Sie im regulären Ausdruck einen Teil als **Rückreferenz** markieren. Beispiel: Suchen mit <code class="codeInline">(<wd:description>.*)1972</code> und Ersetzen mit <code class="codeInline">${1}1977</code>. Voraussetzung: Option „Regulärer Ausdruck verwenden“ muss aktiv sein.
Wie kann ich Überschriften-Level (z.B. h4 zu h2) innerhalb einer Inhaltsbox ändern?
Mit aktivierten regulären Ausdrücken können Sie die Fragmente, in denen das HTML-Level steckt, gezielt ersetzen. Beispiel: Ersetzen von <code class="codeInline">h4</code> durch <code class="codeInline">h2</code> im entsprechenden <code class="codeInline">wd:fragment id="display" type="char.display"</code>-Wert; dabei kann auch der Text der Überschrift über passende reguläre Ausdrücke berücksichtigt werden.
Wie kann ich die Navigations-ID in „wd:navpoint“ auf Erben setzen?
Beispielhaft kann ein Treffer für <code class="codeInline"><wd:navpoint ...></code> so ersetzt werden, dass <code class="codeInline">path="{wGetValueOfDefaultExtension()}"</code> gesetzt wird und <code class="codeInline">id=""</code> für das Erben verwendet wird. Es wird empfohlen vorher mit „Nur Suchen“ zu prüfen, welche Dateien erfasst werden.
Wie kann ich ein Link-Element von einem „zurück“-Standardlink auf „Zurück-Link“ umstellen?
Wenn ein Standard-Link verwendet wurde und auf das spezielle Element für den Zurück-Link umgestellt werden soll, kann dies mit regulären Ausdrücken ersetzt werden. Das Beispiel sucht einen Link mit <code class="codeInline">javascript:history.back();</code> und <code class="codeInline">title="Zurück"</code> und ersetzt ihn durch ein <code class="codeInline">wd:item</code> mit <code class="codeInline">type="link.back"</code> sowie passenden <code class="codeInline"><wd:fragment></code>-Kindern.
Gibt es wichtige Hinweise zur Nutzung regulärer Ausdrücke in neueren PHP-Versionen?
Ja. Ab **PHP 7.3x** muss bei regulären Ausdrücken der **Bindestrich** (Minus) escaped werden. Beispiel im Hinweis: statt <code class="codeInline">preg_match('/[\w-.]+/', '')</code> verwenden: <code class="codeInline">preg_match('/[\w\-.]+/', '')</code>.
Gibt es generelle Risiken oder Einschränkungen beim Ersetzen?
Ja. Laut Hinweis kann **keine Gewähr** für ein erfolgreiches Ersetzen übernommen werden. Daher ist insbesondere das Anlegen eines Backups sowie das Testen mit „Nur Suchen“ wichtig.