{"id":10418,"date":"2026-09-16T12:30:00","date_gmt":"2026-09-16T10:30:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=10418"},"modified":"2026-10-26T11:50:15","modified_gmt":"2026-10-26T10:50:15","slug":"textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\/","title":{"rendered":"Textmuster mit Regex pr\u00fcfen: Falsche Treffer und langsame Suchen vermeiden"},"content":{"rendered":"<p>Ein regul\u00e4rer Ausdruck beschreibt ein Textmuster. Die Engine ist das Programm, das dieses Muster auswertet. Schalter ver\u00e4ndern einzelne Regeln, etwa die Unterscheidung zwischen Gro\u00df- und Kleinschreibung. Zum richtigen Ergebnis geh\u00f6ren neben dem Muster auch Regex-Engine, Schalter und aufgerufene Methode. Eine Teilzeichenfolge zu finden ist eine andere Aufgabe als die vollst\u00e4ndige Eingabe zu pr\u00fcfen.<\/p>\n<p>Ein passendes Beispiel belegt weder korrekte Treffergrenzen noch eine akzeptable Laufzeit. Die folgenden Beispiele verwenden JavaScript, sofern keine andere Sprache genannt ist.<\/p>\n<figure class=\"lw-diagram\"><img decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/dia-10418-regex-20261024.png\" width=\"1120\" height=\"580\" loading=\"lazy\" alt=\"JavaScript-Suche im gesamten Beispiel: 1, 2, 2 und 0 Treffer. Die dunklere Markierung zeigt den Gruppeninhalt.\"><figcaption>JavaScript-Suche im gesamten Beispiel: 1, 2, 2 und 0 Treffer. Die dunklere Markierung zeigt den Gruppeninhalt.<\/figcaption><\/figure>\n<h2>Gierig ist der Quantor<\/h2>\n<p>Ein Quantor legt fest, wie oft ein Teil des Musters vorkommen darf. Eine gierige Wiederholung versucht zuerst, m\u00f6glichst viel passenden Text zu erfassen; eine faule Wiederholung beginnt mit m\u00f6glichst wenig. Beide k\u00f6nnen diese Auswahl ver\u00e4ndern, damit der restliche Ausdruck passt.<\/p>\n<p>Der Punkt <code>.<\/code> trifft ein Zeichen; <code>*<\/code> wiederholt diesen Treffer gierig. In JavaScript bleiben Zeilentrenner ohne den dotAll-Schalter <code>s<\/code> ausgeschlossen. Ein w\u00f6rtlicher Punkt wird als <code>\\.<\/code> geschrieben. Bei zwei Verweisen mit doppelten Anf\u00fchrungszeichen kann <code>href=\"(.*)\"<\/code> vom ersten \u00f6ffnenden bis zum letzten schlie\u00dfenden Anf\u00fchrungszeichen reichen und das dazwischenliegende HTML einschlie\u00dfen.<\/p>\n<p><code>href=\"(.*?)\"<\/code> versucht k\u00fcrzere Gruppeninhalte zuerst. <code>href=\"([^\"]*)\"<\/code> schlie\u00dft doppelte Anf\u00fchrungszeichen dagegen ausdr\u00fccklich aus dem Wert aus. Im abgebildeten Beispiel entstehen jeweils zwei Treffer, sofern die aufgerufene Methode alle Treffer sucht. Beide Muster ersetzen keinen HTML-Parser: Andere Anf\u00fchrungszeichen, Zeichenreferenzen und Dokumentstruktur erfordern f\u00fcr robuste Auswertung einen passenden Parser.<\/p>\n<p>Eine verneinte Zeichenklasse garantiert nicht allgemein r\u00fccksprungfreie Auswertung. Beispielsweise kann <code>[^,]+a<\/code> ein bereits verbrauchtes Zeichen zur\u00fcckgeben, damit das abschlie\u00dfende <code>a<\/code> passt. Im Linkbeispiel ist die ausdr\u00fccklich gesetzte Grenze am Anf\u00fchrungszeichen der entscheidende Vorteil.<\/p>\n<h2>Der Mehrzeilenschalter begrenzt keine Zeichenklasse<\/h2>\n<p><code>[^&amp;]<\/code> enth\u00e4lt Zeilenumbr\u00fcche, weil diese Zeichen keine Und-Zeichen sind. <code>m<\/code> ver\u00e4ndert Anker, aber nicht die von der Klasse erfassten Zeichen. Der erste Ausdruck liefert deshalb <strong>einen<\/strong> Treffer \u00fcber beide Zeilen. Der ausdr\u00fcckliche Ausschluss von CR und LF ergibt zwei Treffer:<\/p>\n<figure style=\"--cbb-digits:1\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"javascript\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">JavaScript<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-javascript\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-keyword\">const<\/span> text = <span class=\"cbb-string\">'utm_source=newsletter\\nutm_medium=email'<\/span>;\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">const<\/span> broad = &#91;...text.<span class=\"cbb-function\">matchAll<\/span>(\/^<span class=\"cbb-function\">utm_<\/span>(&#91;a-z_&#93;+)=(&#91;^&amp;&#93;+)$\/gm)&#93;;\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">const<\/span> bounded = &#91;...text.<span class=\"cbb-function\">matchAll<\/span>(\/^<span class=\"cbb-function\">utm_<\/span>(&#91;a-z_&#93;+)=(&#91;^&amp;\\r\\n&#93;+)$\/gm)&#93;;\n<\/span><span class=\"cbb-line\">console.<span class=\"cbb-function\">log<\/span>(broad.length);   <span class=\"cbb-comment\">\/\/ 1<\/span>\n<\/span><span class=\"cbb-line\">console.<span class=\"cbb-function\">log<\/span>(bounded.length); <span class=\"cbb-comment\">\/\/ 2<\/span>\n<\/span><span class=\"cbb-line\">console.<span class=\"cbb-function\">log<\/span>(broad&#91;<span class=\"cbb-number\">0<\/span>&#93;&#91;<span class=\"cbb-number\">2<\/span>&#93; === <span class=\"cbb-string\">'newsletter\\nutm_medium=email'<\/span>); <span class=\"cbb-comment\">\/\/ true<\/span>\n<\/span><span class=\"cbb-line\">console.<span class=\"cbb-function\">log<\/span>(\/^&#91;<span class=\"cbb-number\">0<\/span>-9&#93;+$\/.<span class=\"cbb-function\">test<\/span>(<span class=\"cbb-string\">'123\\n'<\/span>)); <span class=\"cbb-comment\">\/\/ false (JavaScript, no m)<\/span>\n<\/span><span class=\"cbb-line\">console.<span class=\"cbb-function\">log<\/span>(\/^&#91;<span class=\"cbb-number\">0<\/span>-9&#93;+$\/m.<span class=\"cbb-function\">test<\/span>(<span class=\"cbb-string\">'bad\\n123\\nbad'<\/span>)); <span class=\"cbb-comment\">\/\/ true: one valid line<\/span><\/span><\/code><\/pre><\/figure>\n<p>Das begrenzte Beispiel beschreibt ein bewusst einfaches Zeilenformat mit nichtleerem Wert. Leerzeichen bleiben erlaubt; <code>[^&amp;\\s]+<\/code> w\u00fcrde zus\u00e4tzlich Leerzeichen und weitere Leerraumzeichen ausschlie\u00dfen und damit eine andere Regel festlegen. CRLF-Eingaben und erlaubte Leerwerte ben\u00f6tigen eigene Tests. Echte URL-Abfragezeichenfolgen lassen sich mit einem URL-Parser und <code>URLSearchParams<\/code> einschlie\u00dflich Dekodierung und mehrfacher Schl\u00fcssel auswerten.<\/p>\n<h2>Validierung braucht eine Pr\u00fcfung der gesamten Eingabe<\/h2>\n<p>Eine Suche nach <code>[0-9]+<\/code> trifft innerhalb von <code>abc123def<\/code>. JavaScript <code>\/^[0-9]+$\/<\/code> ohne <code>m<\/code> beschr\u00e4nkt den gesamten Wert auf ASCII-Ziffern. Mit <code>m<\/code> gen\u00fcgt eine passende Zeile innerhalb einer sonst ung\u00fcltigen Eingabe. Alternativen ben\u00f6tigen au\u00dferdem Gruppierung: <code>^(?:yes|no)$<\/code> wendet beide Anker auf beide Alternativen an.<\/p>\n<p>Anker pr\u00fcfen eine Position, etwa den Anfang oder das Ende der Eingabe, ohne dabei ein Zeichen zu verbrauchen. Die Ankerregeln unterscheiden sich. In Python trifft <code>$<\/code> auch unmittelbar vor einem abschlie\u00dfenden Zeilenumbruch; <code>re.fullmatch(r\"[0-9]+\", value)<\/code> pr\u00fcft ausdr\u00fccklich die gesamte Zeichenfolge. PCRE2\/PHP erlaubt <code>\\A[0-9]+\\z<\/code>. In Ruby sind <code>^<\/code> und <code>$<\/code> auch ohne Schalter Zeilenanker; f\u00fcr die gesamte Eingabe stehen <code>\\A<\/code> und <code>\\z<\/code>. Rubys Schalter <code>m<\/code> steuert dotAll, anders als der JavaScript-Schalter f\u00fcr Zeilenanker.<\/p>\n<h2>Mehrdeutige Wiederholung kann viel Rechenzeit kosten<\/h2>\n<p>Backtracking bedeutet: Wenn der restliche Ausdruck nicht passt, kehrt die Auswertung zu einer fr\u00fcheren Entscheidung zur\u00fcck und versucht eine andere M\u00f6glichkeit. Dadurch k\u00f6nnen zahlreiche Aufteilungen desselben Textes durchprobiert werden. <code>^(a+)+$<\/code> gegen eine Folge von <code>a<\/code> mit abschlie\u00dfendem <code>!<\/code> ist eine typische riskante Struktur. Ohne die \u00fcberfl\u00fcssige \u00e4u\u00dfere Wiederholung akzeptiert <code>^a+$<\/code> dieselben g\u00fcltigen Zeichenfolgen. Die konkrete Dauer h\u00e4ngt von Engine, Optimierungen, Eingabe und Grenzen ab; eine allgemeine Drei\u00dfig-Zeichen-Schwelle existiert nicht.<\/p>\n<p>Verschachtelung allein beweist keine exponentielle Laufzeit und ist auch nicht die einzige Ursache langsamer Auswertung. Eine unverankerte Suche nach <code>a+$<\/code> kann bei langer unpassender Eingabe viele Startpositionen versuchen. Das Entfernen einer Verschachtelung rechtfertigt deshalb keine allgemeine Linearit\u00e4tszusage. \u00dcberlappende Alternativen und ein teurer erfolgloser Zweig vor einem erfolgreichen Zweig sind ebenfalls relevant.<\/p>\n<p>Muster wie <code>(.*,)*$<\/code> erlauben null Wiederholungen und k\u00f6nnen bei einer Suche einen leeren Endtreffer liefern. Die Einteilung in immer schnelle Treffer und ausschlie\u00dflich langsames vollst\u00e4ndiges Scheitern greift deshalb zu kurz. Ein fauler Quantor ver\u00e4ndert die Suchreihenfolge, beseitigt mehrdeutige Aufteilungen aber nicht grunds\u00e4tzlich.<\/p>\n\n\n<!-- lw-flux-illu 10416-a4 -->\n<figure class=\"lw-illu\"><img src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/illustrationen\/flux-10416-a4.webp\" width=\"1120\" height=\"630\" loading=\"lazy\" decoding=\"async\" alt=\"Ein Wollfaden zieht sich durch fast jeden Weg und jede Sackgasse eines Maislabyrinths. Genauso probiert ein Suchmuster mit verschachtelter Wiederholung jeden Weg aus und kostet viel Rechenzeit.\"><figcaption>Ein Wollfaden zieht sich durch fast jeden Weg und jede Sackgasse eines Maislabyrinths. Genauso probiert ein Suchmuster mit verschachtelter Wiederholung jeden Weg aus und kostet viel Rechenzeit.<\/figcaption><\/figure>\n\n\n<h2>Tests und Grenzen geh\u00f6ren zum Entwurf<\/h2>\n<p>N\u00fctzliche F\u00e4lle umfassen g\u00fcltige Eingaben, zwei Vorkommen, ung\u00fcltige Pr\u00e4fixe und Suffixe, Leerwerte, CR\/LF, Unicode-Ziffern, fehlende Trennzeichen und lange Beinahetreffer. Erwartungswerte sollten Gruppeninhalte und Trefferpositionen einschlie\u00dfen, nicht nur einen Wahrheitswert. Drei Beispiele sind ein Anfang, kein Vollst\u00e4ndigkeitsnachweis.<\/p>\n<p>Potenziell teure Muster geh\u00f6ren in isolierte Tests mit zun\u00e4chst kleinen Eingaben und einer festen externen Zeitgrenze oder einem unterst\u00fctzten Engine-Timeout. Grenzen f\u00fcr Eingabe und Mustergr\u00f6\u00dfe bleiben sinnvoll. Ein Timeout ist ein zu behandelnder Fehler, kein Beweis f\u00fcr einen ung\u00fcltigen Text.<\/p>\n<div class=\"lw-faq\"><h2>Fragen und Antworten<\/h2>\n<h3>L\u00f6sen atomare Gruppen oder possessive Quantoren jedes Problem?<\/h3><p>Nein. Die Unterst\u00fctzung h\u00e4ngt von der Engine ab; Python kennt beides seit 3.11. Das Verhindern von R\u00fcckspr\u00fcngen kann die akzeptierten Zeichenfolgen ver\u00e4ndern: Ein gieriger possessiver Teil kann Zeichen verbrauchen, die der folgende Teil ben\u00f6tigt. Gleichwertigkeit braucht Tests.<\/p>\n<h3>Was garantiert eine Engine mit linearer Laufzeit?<\/h3><p>RE2 und Go regexp dokumentieren bei festem Muster lineare Auswertung in der Eingabel\u00e4nge. Rust regex nennt O(m \u00d7 n) f\u00fcr eine einzelne Suche mit Mustergr\u00f6\u00dfe m und Eingabel\u00e4nge n; Iteratoren \u00fcber mehrere Treffer k\u00f6nnen quadratische Laufzeit in n besitzen. Nicht unterst\u00fctzte Funktionen, Kompilierung, Gr\u00f6\u00dfenlimits und die verwendete Methode bleiben relevant. Beliebige R\u00fcckverweise und Lookarounds geh\u00f6ren nicht zum Funktionsumfang dieser Bibliotheken.<\/p>\n<h3>Bedeutet \\d immer ASCII-Ziffern?<\/h3><p>In JavaScript trifft <code>\\d<\/code> die Ziffern 0\u20139. Python-Zeichenfolgenmuster und das Standardverhalten von .NET erfassen zus\u00e4tzlich Unicode-Dezimalziffern; Pythons ASCII-Schalter und die ECMAScript-Option von .NET ver\u00e4ndern relevante Regeln. <code>[0-9]<\/code> dr\u00fcckt eine reine ASCII-Anforderung ausdr\u00fccklich aus.<\/p><\/div><div class=\"lw-quellen\"><h2>Quellen<\/h2><ul><li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Guide\/Regular_expressions\" target=\"_blank\" rel=\"noopener noreferrer\">MDN: Regul\u00e4re Ausdr\u00fccke<\/a><\/li><li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Regular_expressions\/Quantifier\" target=\"_blank\" rel=\"noopener noreferrer\">MDN: Quantoren<\/a><\/li><li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Regular_expressions\/Input_boundary_assertion\" target=\"_blank\" rel=\"noopener noreferrer\">MDN: Pr\u00fcfung der Eingabegrenzen<\/a><\/li><li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Regular_expressions\/Character_class_escape\" target=\"_blank\" rel=\"noopener noreferrer\">MDN: Kurzformen f\u00fcr Zeichenklassen<\/a><\/li><li><a href=\"https:\/\/docs.python.org\/3\/library\/re.html\" target=\"_blank\" rel=\"noopener noreferrer\">Python: re<\/a><\/li><li><a href=\"https:\/\/www.pcre.org\/current\/doc\/html\/pcre2pattern.html\" target=\"_blank\" rel=\"noopener noreferrer\">PCRE2: Mustersyntax<\/a><\/li><li><a href=\"https:\/\/docs.ruby-lang.org\/en\/master\/Regexp.html\" target=\"_blank\" rel=\"noopener noreferrer\">Ruby: Regexp<\/a><\/li><li><a href=\"https:\/\/learn.microsoft.com\/en-us\/dotnet\/standard\/base-types\/character-classes-in-regular-expressions\" target=\"_blank\" rel=\"noopener noreferrer\">Microsoft: Zeichenklassen in .NET<\/a><\/li><li><a href=\"https:\/\/github.com\/google\/re2\" target=\"_blank\" rel=\"noopener noreferrer\">Google: RE2<\/a><\/li><li><a href=\"https:\/\/pkg.go.dev\/regexp\" target=\"_blank\" rel=\"noopener noreferrer\">Go: regexp<\/a><\/li><li><a href=\"https:\/\/docs.rs\/regex\/latest\/regex\/\" target=\"_blank\" rel=\"noopener noreferrer\">Rust regex: Laufzeit und nicht vertrauensw\u00fcrdige Eingaben<\/a><\/li><li><a href=\"https:\/\/v8.dev\/blog\/non-backtracking-regexp\" target=\"_blank\" rel=\"noopener noreferrer\">V8: Backtracking und eine alternative Engine<\/a><\/li><li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/URLSearchParams\" target=\"_blank\" rel=\"noopener noreferrer\">MDN: URLSearchParams<\/a><\/li><\/ul><\/div>","protected":false},"excerpt":{"rendered":"<p>Gierige Quantoren, fehlende Grenzen und mehrdeutige Wiederholungen k\u00f6nnen falsche Treffer oder hohe Rechenkosten verursachen. Konkrete JavaScript-Beispiele zeigen das Zusammenspiel von Schaltern, Zeichenklassen und vollst\u00e4ndiger Validierung.<\/p>\n","protected":false},"author":1,"featured_media":30773,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[150],"tags":[92088,92214],"class_list":["post-10418","post","type-post","status-publish","format-standard","hentry","category-web-entwicklung","tag-data-quality-de","tag-devops-de"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Textmuster mit Regex pr\u00fcfen: Falsche Treffer und langsame Suchen vermeiden | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Warum der Punkt zu weit l\u00e4uft, warum eine Zeichenklasse Zeilenumbr\u00fcche \u00fcberschreitet und wie verschachtelte Wiederholung ein Muster endlos macht.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Textmuster mit Regex pr\u00fcfen: Falsche Treffer und langsame Suchen vermeiden | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Warum der Punkt zu weit l\u00e4uft, warum eine Zeichenklasse Zeilenumbr\u00fcche \u00fcberschreitet und wie verschachtelte Wiederholung ein Muster endlos macht.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-16T10:30:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-26T10:50:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/klarheit-20261111-10418.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Textmuster mit Regex pr\u00fcfen: Falsche Treffer und langsame Suchen vermeiden\",\"datePublished\":\"2026-09-16T10:30:00+00:00\",\"dateModified\":\"2026-10-26T10:50:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\\\/\"},\"wordCount\":1024,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/klarheit-20261111-10418.png\",\"keywords\":[\"Data Quality\",\"DevOps\"],\"articleSection\":[\"Web Entwicklung\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\\\/\",\"name\":\"Textmuster mit Regex pr\u00fcfen: Falsche Treffer und langsame Suchen vermeiden | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/klarheit-20261111-10418.png\",\"datePublished\":\"2026-09-16T10:30:00+00:00\",\"dateModified\":\"2026-10-26T10:50:15+00:00\",\"description\":\"Warum der Punkt zu weit l\u00e4uft, warum eine Zeichenklasse Zeilenumbr\u00fcche \u00fcberschreitet und wie verschachtelte Wiederholung ein Muster endlos macht.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/klarheit-20261111-10418.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/klarheit-20261111-10418.png\",\"width\":1200,\"height\":630,\"caption\":\"Textmuster mit Regex pr\u00fcfen: Falsche Treffer und langsame Suchen vermeiden\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Textmuster mit Regex pr\u00fcfen: Falsche Treffer und langsame Suchen vermeiden\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Textmuster mit Regex pr\u00fcfen: Falsche Treffer und langsame Suchen vermeiden | Lukas Wojcik","description":"Warum der Punkt zu weit l\u00e4uft, warum eine Zeichenklasse Zeilenumbr\u00fcche \u00fcberschreitet und wie verschachtelte Wiederholung ein Muster endlos macht.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\/","og_locale":"en_US","og_type":"article","og_title":"Textmuster mit Regex pr\u00fcfen: Falsche Treffer und langsame Suchen vermeiden | Lukas Wojcik","og_description":"Warum der Punkt zu weit l\u00e4uft, warum eine Zeichenklasse Zeilenumbr\u00fcche \u00fcberschreitet und wie verschachtelte Wiederholung ein Muster endlos macht.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-09-16T10:30:00+00:00","article_modified_time":"2026-10-26T10:50:15+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/klarheit-20261111-10418.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Textmuster mit Regex pr\u00fcfen: Falsche Treffer und langsame Suchen vermeiden","datePublished":"2026-09-16T10:30:00+00:00","dateModified":"2026-10-26T10:50:15+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\/"},"wordCount":1024,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/klarheit-20261111-10418.png","keywords":["Data Quality","DevOps"],"articleSection":["Web Entwicklung"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\/","name":"Textmuster mit Regex pr\u00fcfen: Falsche Treffer und langsame Suchen vermeiden | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/klarheit-20261111-10418.png","datePublished":"2026-09-16T10:30:00+00:00","dateModified":"2026-10-26T10:50:15+00:00","description":"Warum der Punkt zu weit l\u00e4uft, warum eine Zeichenklasse Zeilenumbr\u00fcche \u00fcberschreitet und wie verschachtelte Wiederholung ein Muster endlos macht.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/klarheit-20261111-10418.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/klarheit-20261111-10418.png","width":1200,"height":630,"caption":"Textmuster mit Regex pr\u00fcfen: Falsche Treffer und langsame Suchen vermeiden"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/textmuster-mit-regex-prufen-falsche-treffer-und-langsame-suchen-vermeiden\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Textmuster mit Regex pr\u00fcfen: Falsche Treffer und langsame Suchen vermeiden"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/10418","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=10418"}],"version-history":[{"count":8,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/10418\/revisions"}],"predecessor-version":[{"id":26686,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/10418\/revisions\/26686"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/30773"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=10418"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=10418"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=10418"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}