{"id":2177,"date":"2009-01-12T16:27:06","date_gmt":"2009-01-12T15:27:06","guid":{"rendered":"https:\/\/www.herr-rau.de\/wordpress\/?p=2177"},"modified":"2023-05-10T09:34:16","modified_gmt":"2023-05-10T07:34:16","slug":"formale-sprachen-teil-2-regulaere-sprachen","status":"publish","type":"post","link":"https:\/\/www.herr-rau.de\/wordpress\/2009\/01\/formale-sprachen-teil-2-regulaere-sprachen.htm","title":{"rendered":"Formale Sprachen, Teil 2: Regul\u00e4re Sprachen"},"content":{"rendered":"<div style='text-align:right;'><small>(<a href='https:\/\/www.herr-rau.de\/wordpress\/2009\/01\/formale-sprachen-teil-2-regulaere-sprachen.htm#comments'>16 Kommentare.<\/a>)<\/small> <\/div>\n<p><em>Das ist die Fortsetzung <a href=\"https:\/\/www.herr-rau.de\/wordpress\/2009\/01\/formale-sprachen-teil-1-die-chomsky-hierarchie.htm\">dieses Eintrags<\/a>.<\/em><\/p>\n\n\n\n<p>Heute will ich einen Einblick geben dar\u00fcber, was eine Sprache vom Typ Chomsky 3 ausmacht. Diese Sprachen hei\u00dfen <strong>regul\u00e4re Sprachen<\/strong>, sie k\u00f6nnen durch eine regul\u00e4re Grammatik (oder durch einen regul\u00e4ren Ausdruck) beschrieben werden. Mit einem endlichen Automaten kann man \u00fcberpr\u00fcfen, ob ein Wort zu einer Sprache geh\u00f6rt oder nicht.<\/p>\n\n\n\n<p><small>Vorweg: Ich bin mir sicher, dass sich der eine oder andere Fehler eingeschlichen hat, und bin um Berichtigung dankbar. Vor allem regul\u00e4re Ausdr\u00fccken kenne ich nur aus der theoretischen Informatik, und mit der praktischen Anwendung in Perl-Syntax kenne ich mich nur wenig aus; \u00fcber backreferences schreibe ich gar nichts. Ist ja auch kein RegEx-Tutorial.<\/small><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Regul\u00e4re Ausdr\u00fccke<\/h3>\n\n\n\n<p>Am bekanntesten ist wohl der regul\u00e4re Ausdruck (regular expression, RegEx), auch wenn der Begriff vielleicht nicht jedem etwas sagt. Deshalb drei Beispiele.<\/p>\n\n\n\n<p>1. Wenn ich in <strong>Spam Karma<\/strong>, einem verbreiteten Anti-Spam-Plugin f\u00fcr Wordpress, eine Spam-Quelle auf die Blacklist setzen m\u00f6chte, dann geschieht das \u00fcber einen regul\u00e4ren Ausdruck. M\u00f6chte ich zum Beispiel alle Kommentare als Spam markieren lassen, die das Wort &#8222;Sex&#8220; enthalten, dann gebe ich in Spam Karma im entsprechenden Feld ein: \/Sex\/. (Die Schr\u00e4gstriche m\u00fcssen sein, weil so in Perl-Syntax ein regul\u00e4rer Ausdruck markiert wird.)<br>Nun kann es aber sein, dass findige Leute die Blockierung umgehen, indem sie stattdessen das Wort &#8222;Seeex&#8220; benutzen. Ich k\u00f6nnte nat\u00fcrlich nacheinander \/Sex\/, \/Seex\/, \/Seeex\/ und so weiter sperren, aber das w\u00e4re viel Arbeit. Stattdessen kann ich \/Se+x\/ schreiben. Das Pluszeichen gibt an, dass das Zeichen davor beliebig oft, aber mindestens einmal, erscheinen kann. \/Se+x\/ beschreibt also die Sprache, die aus den W\u00f6rter {Sex, Seex, Seeex, Seeeex, Seeeeex &#8230;} besteht.<\/p>\n\n\n\n<p>2. Ein weiteres Beispiel betrifft <strong>Hotlinking<\/strong>. So hei\u00dft das,wenn zum Beispiel jemand ohne meine Erlaubnis eines der Bilder auf meiner Webseite bei sich in seiner Seite einbaut &#8211; und zwar nicht etwa eine bei sich gespeicherte Kopie des Bildes, sondern direkt meine verlinkt. (Gerne geschieht das bei Foren-Bildchen.) Das macht man aus verschiedenen Gr\u00fcnden nicht. Je nach Lust und Laune sperre ich diese M\u00f6glichkeit manchmal, oder sorge daf\u00fcr, dass statt des eigentlich anvisierten Bildes und trotz dessen korrekter Adresse ein ganz anderes Bild bei der fremden Seite angezeigt wird. M\u00f6glich macht das eine Datei, die .htaccess hei\u00dft, die uns hier nicht weiter interessieren soll. In dieser Datei steht dann zum Beispiel, dass Browseranfragen von folgender Adresse ignoriert oder umgeleitet werden sollen:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>(www\\.)?frecherhotlinker\\.(de|com)<\/strong><\/p>\n<\/blockquote>\n\n\n\n<p>Das Fragezeichen hei\u00dft, dass das Element davor &#8211; also das in den Klammern &#8211; ein oder keinmal auftauchen kann, der gerade Strich am Schluss hei\u00dft, dass entweder das Element links oder das rechts davon erscheinen kann. Der regul\u00e4re Ausdruck schlie\u00dft also folgende Adressen ein: {www.frecherhotlinker.de, www.frecherhotlinker.com, frecherhotlinker.de, frecherhotlinker.com}. &#8212; Der Schr\u00e4gstrich vor dem Punkt hei\u00dft nur, dass der Punkt tats\u00e4chlich als Punkt betrachtet werden soll. Sonst ist der Punkt n\u00e4mlich die Abk\u00fcrzung f\u00fcr &#8222;beliebiges Zeichen&#8220;, das man sonst umst\u00e4ndlicher als (a|b|c|d|1|2|3|&#8230;) schreiben m\u00fcsste.<\/p>\n\n\n\n<p>3. Die <strong>Suchfunktion<\/strong> unter Open Office und anderen Textverarbeitungsprogrammen benutzt auch regul\u00e4re Ausdr\u00fccke. Ich kann suchen\/ersetzen nach &#8222;grey&#8220; oder &#8222;gray&#8220;, indem ich den regul\u00e4ren Ausdruck &#8222;grey|gray&#8220; verwende. Ich kann suchen nach &#8222;favour&#8220; oder &#8222;favor&#8220;, indem ich entweder &#8222;favour|favor&#8220; verwende, oder &#8222;fav(o|ou)r&#8220;, oder &#8222;favou?r&#8220;. Das Fragezeichen hei\u00dft auch hier: erscheint 0 oder 1 mal.<br>(Open Office: Bei der Suchfunktion unter &#8222;Mehr Optionen&#8220; das K\u00e4stchen &#8222;regul\u00e4rer Ausdruck&#8220; ankreuzen. Keine Schr\u00e4gstriche am Anfang und Ende machen.)<\/p>\n\n\n\n<p><small>Etwas komplizierter: Ich will in einem Text alle geklammerten Ausdr\u00fccke l\u00f6schen. Dazu kann ich unter Open Office nach folgendem Ausdruck suchen: \\(.*\\) &#8211; dabei steht . f\u00fcr beliebiges Zeichen, * f\u00fcr eine beliebige Wiederholung solcher Zeichen, und (.*) hei\u00dft dann, dass links und rechts davon eine Klammer stehen soll. Die Schr\u00e4gstriche m\u00fcsssen dummerweise sein, weil die Klammern in RegEx-Syntax ja selber schon eine Sonderfunktion haben; die Schr\u00e4gstriche teilen dem Programm mit, dass hier wirklich nur einfache echte Klammern gemeint sind. Aber aufgepasst: dieser Ausdruck umfasst innerhalb eines Absatzes auch Kombinationen wie: <em>(aaa) bbb (aaa)<\/em>, wo man eigentlich die <em>b&#8217;s<\/em> in der Mitte nicht mit gemeint hat. Mehr zu Klammern beim n\u00e4chsten Mal.<\/small><\/p>\n\n\n\n<p>Auch sonst tauchen regul\u00e4re Ausdr\u00fccke an allen m\u00f6glichen Ecken und Enden des Computers auf. Generell gilt: Mit einem RegEx kann man verschiedene Arten von W\u00f6rtern herausfiltern oder suchen.<br>Von einer anderen Perspektive aus betrachtet, hei\u00dft das: Alle W\u00f6rter, die zu dem RegEx passen, geh\u00f6ren zu einer Sprache. Ich will ein paar Beispiele geben. Weil es \u00fcbersichtlicher und einfacher ist, beschr\u00e4nke ich mich auf das <strong>Alphabet {a, b, c}<\/strong>. Ich will mich auch auf einige wenige RegEx-K\u00fcrzel beschr\u00e4nken: <strong>|<\/strong> hei\u00dft &#8222;oder&#8220;, <strong>*<\/strong> hei\u00dft: beliebig oft (auch keinmal).<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Die Sprache aller zweibuchstabigen W\u00f6rter, die mit einem a beginnen?<br>Sprache: {aa, ab, ac}<br>RegEx: a(a|b|c)<\/li>\n\n\n\n<li>Die Sprache aller W\u00f6rter \u00fcberhaupt, die mit einem a beginnen?<br>Sprache: {a, aa, ab, ac, aaa, aab, aac, aba, abb, abc, aca, acb, acc, aaaa&#8230;}<br>RegEx: a(a|b|c)*<\/li>\n\n\n\n<li>Die Sprache aller W\u00f6rter der L\u00e4nge drei?<br>Sprache: {aaa, aab, aac, aba, abb, abc, aca, acb, acc &#8230;} (insgesamt 27 St\u00fcck)<br>RegEx: (a|b|c)(a|b|c)(a|b|c)<\/li>\n\n\n\n<li>Die Sprache aller W\u00f6rter mit genau einem a darin?<br>Sprache: {bcbcba, a, abbbcccb, bab, bccbab&#8230;}<br>RegEx: (b|c)*a(b|c)*<\/li>\n\n\n\n<li>Die Sprache aller W\u00f6rter, in denen maximal zwei verschiedene Buchstaben auftauchen?<br>Sprache: {a, b, c, ab, abbaab, cacaac, bcbcbc, bbb&#8230;}<br>RegEx: (a|b)*|(a|c)*|(b|c)*<\/li>\n<\/ul>\n\n\n\n<p>Weil regul\u00e4re Ausdr\u00fccke auf diese Weise schnell umst\u00e4ndlich werden k\u00f6nnen, gibt es viele verschiedene Abk\u00fcrzungen (wie . f\u00fcr &#8222;beliebiges Zeichen&#8220;), die man aber alle auf die oben verwendeten zur\u00fcckf\u00fchren kann.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Regul\u00e4re Grammatiken<\/h3>\n\n\n\n<p>Eine regul\u00e4re Sprache kann man statt durch einen regul\u00e4ren Ausdruck auch durch eine regul\u00e4re Grammatik beschreiben. Machen wir es uns einfach: Das Alphabet sei <strong>{a, b}<\/strong>, die Sprache sei durch <strong>ab(bb)*a<\/strong> beschrieben. Die Sprache ist demnach {aba, abbba, abbbbba&#8230;}, jedes Wort besteht aus einem a und danach einer ungeraden Zahl an b&#8217;s, gefolgt von einem schlie\u00dfenden a.<\/p>\n\n\n\n<p>Die Regeln der Grammatik:<br>1. S =&gt; aA<br>2. A =&gt; bB<br>3. B =&gt; a<br>4. B =&gt; bC<br>5. C =&gt; bB<\/p>\n\n\n\n<p>S ist der Startpunkt, Gro\u00dfbuchstaben sind hier sogenannte Nichtterminale (also quasi Namen von weiteren Ableitungsregeln), Kleinbuchstaben sind Terminalzeichen (Zeichen des Alphabets, hier also nur a oder b). Man f\u00e4ngt bei S an. Alles, was links vom Pfeil steht, kann man durch das ersetzen, was rechts davon steht. Regel 2 sagt also, dass man jedes irgendwo auftauchende A durch bB ersetzen kann.<br>Eine Ableitung ist dann abgeschlossen, wenn sie nur noch aus Terminalzeichen, also Buchstaben des Alphabets, besteht (hier a und b).<\/p>\n\n\n\n<p>Zum Beispiel:<\/p>\n\n\n\n<p>aba entsteht durch die Regeln 1, 2, 3:<br>S =&gt; aA, =&gt; abB, =&gt; aba<\/p>\n\n\n\n<p>abbba entsteht durch die Regeln 1, 2, 4, 5, 3:<br>S =&gt; aA, =&gt; abB, =&gt; abbC, =&gt; abbbB, =&gt; abbba<\/p>\n\n\n\n<p>abbbbba entsteht durch die Regeln 1, 2, 4, 5, 4, 5, 3:<br>S =&gt; aA, =&gt; abB, =&gt; abbC, =&gt; abbbB, =&gt; abbbbC, =&gt;abbbbbB, =&gt;abbbbba<\/p>\n\n\n\n<p>Eine (rechts-)regul\u00e4re Grammatik erf\u00fcllt folgende Bedingungen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Links vom Pfeil steht immer nur ein einziges Nichtterminalzeichen.<\/li>\n\n\n\n<li>Rechts vom Pfeil steht entweder gar nichts (dargestellt durch ein \u03b5), oder genau ein Terminalzeichen, oder genau ein Terminal gefolgt von genau einem Nichtterminal.<\/li>\n<\/ul>\n\n\n\n<p>Man sieht an der Ableitung der drei W\u00f6rter oben gut, das bei einer regul\u00e4ren Grammatik das Wort einzelner Buchstabe f\u00fcr einzelner Buchstabe von links nach rechts aufgebaut wird. Die Regeln f\u00fcr diesen Grammatiktyp sind so beschaffen, dass das immer so ist. Ein Wort, das 6 Zeichen lang ist, wird immer in 6 Schritten abgeleitet.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Endliche Automaten<\/h3>\n\n\n\n<p>Und zuletzt kann man eine regul\u00e4re Sprache auch durch einen endlichen Automaten beschreiben. Der Automat, der sich auf dieselbe Sprache bezieht wie <strong>ab(bb)*a<\/strong>, sieht so aus:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"550\" height=\"394\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/automat.jpg\" alt=\"automat\" class=\"wp-image-2184\" title=\"automat\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/automat.jpg 550w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/automat-150x107.jpg 150w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/figure>\n\n\n\n<p>Wenn man ihn richtig liest, sieht man gleich die Parallelen zu der oben angegebenen Grammatik. Die Kreise geben verschiedene Zust\u00e4nde an, in denen sich der Automat befindet. Man kann mit dem Automaten pr\u00fcfen, ob zum Beispiel das Wort &#8222;aba&#8220; von ihm akzeptiert wird.<br>Man beginnt immer dort, wo der Pfeil ist, hier also beim Zustand (S). Dann nimmt man sich den n\u00e4chsten (ersten) Buchstaben vor, ein a, man folgt der Beschriftung der Pfeile und landet im Zustand (A). Kommt dann das b, geht man zu (B). Kommt dann das (letzte) a, landet man bei ((Z)). Da danach kein Buchstabe im Wort mehr kommt, h\u00f6rt man auf und schaut, ob man auf einem &#8222;akzeptierenden&#8220; Zustand steht. Das sind die mit den zwei Kreisen drumrum. In dem Automaten oben ist nur ((Z)) akzeptierend. Und ja, wir sind in diesem Zustand, also wird aba akzeptiert.<\/p>\n\n\n\n<p>Ein Wort wird dann nicht akzeptiert, wenn der Automat in einem der anderen, nicht akzeptierenden Zust\u00e4nde stehen bleibt &#8211; S, A, B, C oder X. Das Wort abbb landet zum Beispiel bei (B), das Wort abb bei (C) und die W\u00f6rter abba, ba und abbbab, abbbaa alle bei (X). (X) ist in diesem Beispiel \u00fcbrigens ein langweiliger Zustand, den der Automat nie wieder verlassen wird. Er steht quasi f\u00fcr &#8222;endg\u00fcltig falsch, da wird nichts mehr draus&#8220;. Ich habe alles, was ihn betrifft, mal nur mit Bleistift eingezeichnet.<br>Bei einem Wort, das 6 Zeichen lang ist, wei\u00df man immer nach genau 6 Schritten, ob es akzeptiert wird oder nicht.<\/p>\n\n\n\n<p>Endliche Automaten hei\u00dfen so, weil man sie vollst\u00e4ndig auf ein St\u00fcck Papier malen kann. Man kann mit ihnen aber unendlich viele und unendlich lange W\u00f6rter basteln.<\/p>\n\n\n\n<p>Typische Aufgaben aus dem Studium: Zu einer gegebenen regul\u00e4ren Sprache den regul\u00e4ren Ausdruck finden, die regul\u00e4re Grammatik oder den Automaten dazu, oder umgekehrt. (Oder beweisen, dass eine gegebene Sprache regul\u00e4r ist.)<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Das Wortproblem f\u00fcr regul\u00e4re Sprachen<\/h3>\n\n\n\n<p>Das Wortproblem wird sp\u00e4ter noch einmal wichtig. Es lautet: Kann man einen Algorithmus bauen (also zum Beispiel einen solchen Automaten), der f\u00fcr jedes beliebige Wort zu einem gegebenen Alphabet in endlicher Zeit entscheidet, ob das Wort zu einer bestimmten Sprache geh\u00f6rt oder ob es nicht dazu geh\u00f6rt? F\u00fcr regul\u00e4re Sprachen: ja. Das Wortproblem f\u00fcr solche Sprachen ist &#8222;entscheidbar&#8220;. Sogar recht schnell: Bei einem Wort der L\u00e4nge n braucht man n Schritte, und man hat die Antwort &#8211; die Best\u00e4tigung oder die Ablehnung.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. Zusammenfassung<\/h3>\n\n\n\n<p>Mit einem regul\u00e4ren Ausdruck kann man sehr viele sehr verschiedene W\u00f6rter auf einmal beschreiben, n\u00e4mlich alle, die zu einer bestimmten regul\u00e4ren Sprache geh\u00f6ren. (Dazu gibt es alternativ eine regul\u00e4re Grammatik oder und einen entsprechenden Automaten.) Allerdings geht noch lange nicht alles. Schon so etwas Simples wie &#8222;alle W\u00f6rter, die genauso oft den Buchstaben a wie den Buchstaben b enthalten&#8220; geht mit keiner dieser Methoden. Denn die Sprache, die aus allen diesen W\u00f6rtern besteht, ist keine regul\u00e4re Sprache. Sie geh\u00f6rt zum Chomsky-Typ 2, einer kontextfreien Sprache.<\/p>\n\n\n\n<p>Mehr dazu, und warum das \u00fcberhaupt wichtig ist, beim n\u00e4chsten Mal.<\/p>\n\n\n\n<p><em>Nachtrag:<\/em> Ein weiteres Beispiel ist mir eingefallen, das vielleicht n\u00fctzlich ist. Man nimmt sich ein W\u00f6rterbuch und sucht mit einem RegEx nach allen Palindromen darin, also allen W\u00f6rtern, die vorw\u00e4rts und r\u00fcckw\u00e4rts gleich gelesen werden. W\u00e4re sch\u00f6n, wenn&#8217;s ginge. Geht aber nicht. Auch die Sprache, die aus allen Palindromen besteht, ist Chomsky 2.<\/p>\n\n\n\n<p><strong>Freiwillige Hausaufgabe f\u00fcr Einsteiger:<\/strong><\/p>\n\n\n\n<p>Welche W\u00f6rter akzeptiert der folgende Automat? Welcher regul\u00e4re Ausdruck beschreibt dieselbe Sprache? Es gibt drei Zust\u00e4nde {S, B, X}, der Startzustand ist S, akzeptierend ist nur B. Das Alphabet ist wieder nur {a, b}.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"550\" height=\"439\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/automat2.jpg\" alt=\"automat2\" class=\"wp-image-2189\" title=\"automat2\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/automat2.jpg 550w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/automat2-150x119.jpg 150w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/figure>\n\n\n\n<p><strong>Und ein letzter Tipp:<\/strong><\/p>\n\n\n\n<p>Wer die Konstruktion endlicher Automaten und das Umbauen von regul\u00e4ren Ausdr\u00fccken zu solchen &#8211; oder umgekehrt &#8211; \u00fcben m\u00f6chte, und das k\u00f6nnen fast nur Informatiker sein, dem sei dieses wirklich gute Programm empfohlen: <a href=\"http:\/\/www.swisseduc.ch\/informatik\/exorciser\/index.html\">Exorciser<\/a>. L\u00e4uft unter Java, ohne Installation.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.herr-rau.de\/wordpress\/2009\/01\/formale-sprachen-teil-3-kontextfreie-sprachen.htm\">Teil 3 folgt.<\/a><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/ssl-vg03.met.vgwort.de\/na\/14818ca7093a402d801670cd92575d18\" alt=\"\" width=\"1\" height=\"1\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>(16 Kommentare.) Das ist die Fortsetzung dieses Eintrags. Heute will ich einen Einblick geben dar\u00fcber, was eine Sprache vom Typ Chomsky 3 ausmacht. Diese Sprachen hei\u00dfen regul\u00e4re Sprachen, sie k\u00f6nnen durch eine regul\u00e4re Grammatik (oder durch einen regul\u00e4ren Ausdruck) beschrieben werden. Mit einem endlichen Automaten kann man \u00fcberpr\u00fcfen, ob ein Wort zu einer Sprache geh\u00f6rt [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":2184,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[25],"tags":[227],"class_list":["post-2177","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-informatik","tag-informatik"],"jetpack_featured_media_url":"https:\/\/www.herr-rau.de\/wordpress\/archiv\/automat.jpg","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/2177","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/comments?post=2177"}],"version-history":[{"count":3,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/2177\/revisions"}],"predecessor-version":[{"id":56018,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/2177\/revisions\/56018"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/media\/2184"}],"wp:attachment":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/media?parent=2177"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/categories?post=2177"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/tags?post=2177"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}