Notepad++ Suchen & Ersetzen in umgebrochenen Zeilen.
Will man nachträglich Bereiche in z.B. HTML-Dateien hinzufügen oder verändern, so bietet sich die Suche mit regulären Ausdrücken in Notepad++ dafür an. Insbesondere wenn man eine Veränderung an mehreren Dateien vornehmen muss, lässt sich das mit Notepad++ und "In Dateien suchen" gut realisieren. Zum Problem kann es dabei kommen, wenn die jeweilige Datei bereits formatiert ist und der gesuchte Bereich Zeilenumbrüche enthält.
Möchte man z.B. allen Links in einem Dokument wie dem folgenden ein Span-Element hinzufügen, müssen die Zeilenumbrüche bei der Suche berücksichtigt werden.
<!DOCTYPE html>
<html lang="de-DE">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Regextest</title>
<meta content="Regextest" name="description">
<link rel="stylesheet" href="./style.css" type="text/css">
</head>
<body>
<h1>Seiten</h1>
<p><a target="_parent" title="Link 1" href="./seite1.html">Link zu Seite 1</a></p>
<p><a target="_parent" title="Link 2 ist länger als Link 1" href="./seite2.html">Link
zu Seite 2 ist länger als Link zu Seite 1</a></p>
<p><a target="_parent" title="Link 3 ist noch viel länger als Link 1"
href="./seite3.html">Link 3 ist noch viel länger als Link 1</a>
</p>
</body>
</html>
Naheliegend wäre für diese Aufgabe ein regulären Ausdruck wie der folgende.
- Suchen:
- (<a.*>)(.*)<\/a>
- Ersetzen:
- $1<span class="link">$2</span></a>
Im gezeigten Beispiel hat aber der Link 2 einen Zeilenumbruch im Linktext und der Link 3 hat einen Zeilenumbruch im Bereich des href-Attribut zwischen <a und >. Vom obigen regulären Ausdruck wird nur der erste Link gefunden, die Links mit Zeilenumbrüchen jedoch nicht.
Damit auch Links mit Zeilenumbrüchen in den verschiedenen Bereichen gefunden werden (unabhängig von Linux oder Windows), muss das Suchmuster folgendermaßen angepasst werden.
- Suchen:
- (<a(.*|.*\r?\n.*)>)(.*|.*\r?\n.*)<\/a>
- Ersetzen:
- $1<span class="link">$3</span></a>
Damit werden alle Links unabhängig davon gefunden, ob und wo es eine Zeilenumbruch gibt. Das Ergebnis sieht damit folgendermaßen aus.
...
<body>
<h1>Seiten</h1>
<p><a target="_parent" title="Link 1" href="./seite1.html"><span class="link">Link zu Seite 1</span></a></p>
<p><a target="_parent" title="Link 2 ist länger als Link 1" href="./seite2.html"><span class="link">Link
zu Seite 2 ist länger als Link zu Seite 1</span></a></p>
<p><a target="_parent" title="Link 3 ist noch viel länger als Link 1"
href="./seite3.html"><span class="link">Link 3 ist noch viel länger als Link 1</span></a>
</p>
</body>
</html>
Reguläre Ausdrücke können mit den Online-Tools RegEx101 und ExtendsClass, sehr gut überprüft werden.