<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Regular Expressions on Dem hoergen Blog</title>
    <link>https://hyperblog.de/hoergen/tags/regular-expressions/</link>
    <description>Recent content in Regular Expressions on Dem hoergen Blog</description>
    <image>
      <title>Dem hoergen Blog</title>
      <url>https://hyperblog.de/hoergen/favicon.svg</url>
      <link>https://hyperblog.de/hoergen/favicon.svg</link>
    </image>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Thu, 17 Aug 2023 13:45:11 +0200</lastBuildDate>
    <atom:link href="https://hyperblog.de/hoergen/tags/regular-expressions/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Vim - Suchen &amp; Ersetzen - RegEx</title>
      <link>https://hyperblog.de/hoergen/posts/2023/2023-08-17-suchen-ersetzen-regulaere-ausdruecke-vim/</link>
      <pubDate>Thu, 17 Aug 2023 13:45:11 +0200</pubDate>
      <guid>https://hyperblog.de/hoergen/posts/2023/2023-08-17-suchen-ersetzen-regulaere-ausdruecke-vim/</guid>
      <description>&lt;p&gt;Reguläre Ausdrücke (RegEx) sind DER Shit, wenn es darum geht extrem schnelle und auch sehr komplexe Dinge mit Texten bzw Strings oder einfach generell bei Suchen zu veranstalten.&lt;/p&gt;
&lt;p&gt;Ein Anwendungsfall kommt immer wieder vor, nämlich das Suchen&amp;amp;Ersetzen.&lt;/p&gt;
&lt;p&gt;Das Muster sieht so aus&lt;/p&gt;
&lt;p&gt;&lt;code&gt;:[range] s / [pattern] / [string] / [flags] [count]&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;range&#34;&gt;[range]&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;bei range steht meist ein Prozentzeichen &lt;code&gt;%&lt;/code&gt; das für den gesamten Text aka der gesamte Datei Inhalt.&lt;/li&gt;
&lt;li&gt;hier können auch &lt;code&gt;1,$&lt;/code&gt; = erste Zeile, erstes Zeichen bis letzte Zeile, letztes Zeichen&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.,$&lt;/code&gt; heisst von der aktuellen Zeile bis zum Ende&lt;/li&gt;
&lt;li&gt;Von der aktuellen Zeile für weitere 10 Zeilen &lt;code&gt;:.,.+10&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;{Nummer}&lt;/code&gt; - in Zeile Nummer sowieso z.B. &lt;code&gt;:14&lt;/code&gt; Zeile 14&lt;/li&gt;
&lt;li&gt;Die Übersicht der schier unendlichen Bereichsangaben bekommst du, wenn du vim aufrufst und dann &lt;code&gt;:h range&lt;/code&gt; eingibst&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;s-substitute&#34;&gt;s (substitute)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Zwischen dem Range und dem &lt;code&gt;s&lt;/code&gt; darf kein Leerzeichen sein! (häufiger Fehler)&lt;/li&gt;
&lt;li&gt;Substitute ist die Suchen&amp;amp;Ersetzen Funktion. Wichtig zu wissen ist, dass alle Zeichen, die nicht in a-z und A-Z sind, müssen mit einem vorangestelltem Backslash &lt;code&gt;\&lt;/code&gt; &amp;ldquo;escaped&amp;rdquo; werden.&lt;/li&gt;
&lt;li&gt;Also Zahlen, Punkte, Klammern und Sonderzeichen mit einem Backslash &lt;code&gt;\&lt;/code&gt; escaped werden.&lt;/li&gt;
&lt;li&gt;Ein Backslash wird dann natürlich auch mit einem Backslash escaped &lt;code&gt;\\&lt;/code&gt;. Und ein Slash im Suchstring wird natürlich auch mit einem Backslash escaped &lt;code&gt;\/&lt;/code&gt; . Auch ein Leerzeichen bzw Blank wird mit einem Backslash escaped.&lt;/li&gt;
&lt;li&gt;Der Grund dafür ist, dass viele dieser Zeichen selbst eine Funktion für die Suche darstellen. Und damit da keine Verwechselung entsteht muss extra &amp;ldquo;escaped&amp;rdquo; werden.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;pattern&#34;&gt;[pattern]&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Pattern ist der zu suchende Text&lt;/li&gt;
&lt;li&gt;Mit einem einleitenden &lt;code&gt;\c&lt;/code&gt;TEXT wird Groß- und Kleinschreibung bei TEXT ignoriert&lt;/li&gt;
&lt;li&gt;Mit einem &lt;code&gt;\v&lt;/code&gt; (magic mode) müssen Zeichen wie ein Leerzeichen oder Gänsefüßchen nicht extra escaped werden&lt;/li&gt;
&lt;li&gt;In einem Pattern können auch wiederum &lt;a href=&#34;https://vimdoc.sourceforge.net/htmldoc/pattern.html#pattern&#34;&gt;Pattern-Funktionen&lt;/a&gt; eingefügt werden, wie z.B. ab dem 5. Zeichen (spalte/column) &lt;code&gt;%5c&lt;/code&gt; oder bis zum 5. Zeichen &lt;code&gt;%&amp;gt;5c&lt;/code&gt; und viele weitere.&lt;/li&gt;
&lt;li&gt;in vim &lt;code&gt;:help pattern&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;string&#34;&gt;[string]&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;String ist der Text, der das gesuchte Pattern ersetzt werden soll.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;flags&#34;&gt;[flags]&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;g (global)&lt;/code&gt; wiederholt das Suchen&amp;amp;Ersetzen, bis zum Ende des Textes. Wird g nicht angegeben, wird nach dem ersten Suchtreffer aufgehört.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;c (confirm)&lt;/code&gt; zum Bestätigen des Ersetzens&lt;/li&gt;
&lt;li&gt;&lt;code&gt;i (ignore)&lt;/code&gt; um Groß/Kleinschreibung zu ignorieren&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;count&#34;&gt;[count]&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;der Parameter count wird bei Bedarf in einer positiven ganzen Zahl wie z.B. 5 angegeben. Er wirkt sich auf das Suchen&amp;amp;Ersetzen so aus, dass z.B.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;%s/blah/blubb/g 5&lt;/code&gt; - vom Textanfang die ersten 5 Zeilen bearbeitet werden&lt;/li&gt;
&lt;li&gt;&lt;code&gt;10,$s/blah/blubb/g 5&lt;/code&gt; - ab Zeile 10, die Zeilen 10, 11, 12, 13, 14, also insgesamt 5 Zeilen bearbeitet werden.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Slash &lt;code&gt;/&lt;/code&gt; - das Slash &amp;ldquo;/&amp;rdquo; trennt die verschiedenen Parameter voneinander.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
