tag:forum.selfhtml.org,2005:/self Dauerthema: Regexen ;) – SELFHTML-Forum 2021-04-24T07:24:23Z https://forum.selfhtml.org/self/2021/apr/23/dauerthema-regexen/1787627#m1787627 Jörg 2021-04-23T12:24:02Z 2021-04-23T12:24:02Z Dauerthema: Regexen ;) <p>Hallo,</p> <p>habe mich mal wieder an eine Regex gemacht und mal wieder funktioniert sie nicht auf Anhieb:</p> <p>Mein BBcode-Parser haut mir je nach Installation ein (oder mehrere) Subdirs in den Source eines base64 codierten Images rein.</p> <p>Dort steht dann z.b. <code>src="/myDir123/data:image/png;base64</code> snstelle von <code>src="data:image/png;base64</code>. Leider weiß ich nicht, an welcher Stelle der Parser das amcht, sonst würde ich es natürlich gerne gleich an der Wurzel beheben. So bleibt mir erstmal nicht mehr als es zu flickschustern, was in Anbetracht der seltenen Anwendung auch ok wäre.</p> <p>Meine Regex sieht so aus:</p> <pre><code class="block">$myReturnText = preg_replace('/src="(.*)data:image/png;base64/', 'src="data:image/png;base64', $myReturnText); </code></pre> <pre><code class="block">src=" = muss vorkommen data:image/png;base64 = muss vorkommen (.*) = Und dazwischen kann stehen, was will </code></pre> <p>Aber leider greift meine Regex nicht.</p> <p>Wo ist der Fehler?</p> <p>Jörg</p> https://forum.selfhtml.org/self/2021/apr/23/dauerthema-regexen/1787629#m1787629 Jörg 2021-04-23T12:27:25Z 2021-04-23T12:27:38Z Dauerthema: Regexen ;) <blockquote> <p>Aber leider greift meine Regex nicht.</p> <p>Wo ist der Fehler?</p> </blockquote> <p>Ja, ok.<br> Habs gesehen, ich habe ein paar Maskierungen vergessen.</p> <p>Jörg</p> https://forum.selfhtml.org/self/2021/apr/23/dauerthema-regexen/1787644#m1787644 Der Martin 2021-04-23T14:21:32Z 2021-04-23T14:21:32Z Dauerthema: Regexen ;) <p>Hallo Jörg,</p> <blockquote> <p>Mein BBcode-Parser haut mir je nach Installation ein (oder mehrere) Subdirs in den Source eines base64 codierten Images rein.</p> </blockquote> <p>meine These: Der Parser versucht, relative Bild-URLs zu vervollständigen; der Programmierer kannte aber noch keine data-URLs und wusste nicht, dass die anders zu handhaben sind.</p> <blockquote> <p>Leider weiß ich nicht, an welcher Stelle der Parser das amcht, sonst würde ich es natürlich gerne gleich an der Wurzel beheben.</p> </blockquote> <p>Schade - ja, das wäre auch meine Empfehlung gewesen.<br> Nicht die Symptome bekämpfen, sondern gleich die Ursache.</p> <p>Live long and <s>pros</s> healthy,<br>  Martin</p> <div class="signature">-- <br> Wer respektiert werden will, sollte zunächst damit anfangen, andere zu respektieren. </div> https://forum.selfhtml.org/self/2021/apr/23/dauerthema-regexen/1787642#m1787642 Rolf B 2021-04-23T14:07:46Z 2021-04-23T14:07:46Z Dauerthema: Regexen ;) <p>Hallo Jörg,</p> <p>ich habe nur eine gesehen. Gleichheitszeichen, Doppelpunkt und Semikolon haben meines Wissens keine Sonderbedeutung.</p> <p><code>/src="(.*)data:image/png;base64/</code><br> <code>____________________!___________</code></p> <p>Statt das / zu escapen kannst Du aber auch einen anderen Regex-Delimiter nehmen, z.B. ein Backtick ` oder ein Hash #.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> https://forum.selfhtml.org/self/2021/apr/23/dauerthema-regexen/1787654#m1787654 MudGuard http://www.andreas-waechter.de/ 2021-04-23T16:01:33Z 2021-04-23T16:01:33Z Dauerthema: Regexen ;) <p>Hi,</p> <blockquote> <blockquote> <p>Wo ist der Fehler? Ja, ok.<br> Habs gesehen, ich habe ein paar Maskierungen vergessen.</p> </blockquote> </blockquote> <p>und Du hast vergessen, daß * gierig ist.</p> <p>Aus <code>src="/myDir123/data:image/png;base64abcde" src="/myDir123/data:image/png;base64</code></p> <p>würde <code>src="data:image/png;base64</code></p> <p>Sprich: aus mehreren Bildelementen würde mitsamt allem, was dazwischenliegt, ein Bildelement.</p> <p>Du mußt un-gierig suchen: <code>.*?</code> statt <code>.*</code></p> <p>cu,<br> Andreas a/k/a MudGuard</p> https://forum.selfhtml.org/self/2021/apr/23/dauerthema-regexen/1787682#m1787682 Jörg 2021-04-23T18:34:40Z 2021-04-23T18:34:40Z Dauerthema: Regexen ;) <p>Hallo Rolf,</p> <blockquote> <p>ich habe nur eine gesehen. Gleichheitszeichen, Doppelpunkt und Semikolon haben meines Wissens keine Sonderbedeutung.</p> <p><code>/src="(.*)data:image/png;base64/</code><br> <code>____________________!___________</code></p> </blockquote> <p>Und wie sieht es mit dem <code>"</code> aus?</p> <blockquote> <p>Statt das / zu escapen kannst Du aber auch einen anderen Regex-Delimiter nehmen, z.B. ein Backtick ` oder ein Hash #.</p> </blockquote> <p>Ok, wußte ich gar nicht. Danke.</p> <p>Jörg</p> https://forum.selfhtml.org/self/2021/apr/23/dauerthema-regexen/1787681#m1787681 Jörg 2021-04-23T18:33:07Z 2021-04-23T18:33:07Z Dauerthema: Regexen ;) <p>Hallo Martin,</p> <blockquote> <p>meine These: Der Parser versucht, relative Bild-URLs zu vervollständigen; der Programmierer kannte aber noch keine data-URLs und wusste nicht, dass die anders zu handhaben sind.</p> </blockquote> <p>Gut möglich.</p> <p>Wie gesagt, ich hätte es gerne an der Wurzel behoben, aber in diesem Fall ist der Workaround ok, weil das Ganze eh selten zum Einsatz kommt.</p> <p>Jörg</p> https://forum.selfhtml.org/self/2021/apr/23/dauerthema-regexen/1787655#m1787655 Rolf B 2021-04-23T16:17:48Z 2021-04-23T16:17:48Z Dauerthema: Regexen ;) <p>Hallo MudGuard,</p> <blockquote> <p>aus mehreren Bildelementen würde mitsamt allem, was dazwischenliegt, ein Bildelement</p> </blockquote> <p>Wenn er über das ganze HTML Dokument sucht, ja.</p> <p>Ich habe gemutmaßt, dass er nur den Wert des src Attributs behandelt. Das mag natürlich ein Irrtum gewesen sein.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> https://forum.selfhtml.org/self/2021/apr/23/dauerthema-regexen/1787680#m1787680 Jörg 2021-04-23T18:31:20Z 2021-04-23T18:31:20Z Dauerthema: Regexen ;) <p>Hallo Andreas,</p> <blockquote> <p>Sprich: aus mehreren Bildelementen würde mitsamt allem, was dazwischenliegt, ein Bildelement.</p> <p>Du mußt un-gierig suchen: <code>.*?</code> statt <code>.*</code></p> </blockquote> <p>Kannst Du mir das ? nochmal erklären? 1 oder keins dachte ich, wäre die Bedeutung. Deshalb verstehe ich .*? nicht.</p> <p>Jörg</p> https://forum.selfhtml.org/self/2021/apr/23/dauerthema-regexen/1787688#m1787688 MudGuard http://www.andreas-waechter.de/ 2021-04-23T19:07:33Z 2021-04-23T19:07:33Z Dauerthema: Regexen ;) <p>Hi,</p> <blockquote> <blockquote> <p>Du mußt un-gierig suchen: <code>.*?</code> statt <code>.*</code></p> </blockquote> <p>Kannst Du mir das ? nochmal erklären? 1 oder keins dachte ich, wäre die Bedeutung. Deshalb verstehe ich .*? nicht.</p> </blockquote> <p>Das Fragezeichen als alleiniger Quantifier sagt 0 oder 1.<br> Aber in Verbindung mit + oder * sagt es: so wenig wie möglich.<br> (ohne ? gilt für + oder *: so viel wie möglich)</p> <p>cu,<br> Andreas a/k/a MudGuard</p> https://forum.selfhtml.org/self/2021/apr/23/dauerthema-regexen/1787691#m1787691 Rolf B 2021-04-23T19:09:46Z 2021-04-23T19:09:46Z Dauerthema: Regexen ;) <p>Hallo Jörg,</p> <p>eine kurze Einführung zum Thema "greedy" in Regexen steht <a href="https://wiki.selfhtml.org/wiki/JavaScript/Objekte/RegExp#Gierigkeit" rel="nofollow noopener noreferrer">in unserem Wiki</a>.</p> <p>Die dort dargestellte Information gilt für JavaScript und ist für PHP unvollständig. Regexe verwenden aus gutem Grund ein Delimiter-Zeichen, man kann hinter dem rechten Delimiter nämlich noch Optionen angeben. Welche das sind, ist <a href="https://www.php.net/manual/de/reference.pcre.pattern.modifiers.php" rel="nofollow noopener noreferrer">hier dokumentiert</a>.</p> <p>Das U Flag (großes U) schaltet die Greediness für die ganze Regex um. Ohne das U sind * und + greedy, und das Fragezeichen macht sie ungreedy. Mit dem U sind * und + ungreedy, und das Fragezeichen macht sie greedy.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> https://forum.selfhtml.org/self/2021/apr/23/dauerthema-regexen/1787686#m1787686 Rolf B 2021-04-23T18:52:10Z 2021-04-23T18:52:10Z Dauerthema: Regexen ;) <p>Hallo Jörg,</p> <p>erwähnte ich regex101.com schon? Kennt PCRE und PCRE2 (links, bei Flavor).</p> <p>Der <strong>erklärt</strong> dir die Regex Punkt für Punkt. Und erklärt Dir auch, dass er zum " nichts zu erklären hat. Only some Englisch must you can.</p> <p>Den Delimiter kannst Du dort auch tauschen, einfach auf das graue / klicken.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> https://forum.selfhtml.org/self/2021/apr/23/dauerthema-regexen/1787690#m1787690 MudGuard http://www.andreas-waechter.de/ 2021-04-23T19:08:57Z 2021-04-23T19:08:57Z Dauerthema: Regexen ;) <p>Hi,</p> <blockquote> <p>Only some Englisch must you can.</p> </blockquote> <p>Nur einige Englisch mußt Du Dose? </p> <p>cu,<br> Andreas a/k/a MudGuard</p> https://forum.selfhtml.org/self/2021/apr/23/dauerthema-regexen/1787704#m1787704 Jörg 2021-04-24T07:22:54Z 2021-04-24T07:22:54Z Dauerthema: Regexen ;) <p>Hallo Andreas,</p> <blockquote> <blockquote> <p>Kannst Du mir das ? nochmal erklären? 1 oder keins dachte ich, wäre die Bedeutung. Deshalb verstehe ich .*? nicht.</p> </blockquote> <p>Das Fragezeichen als alleiniger Quantifier sagt 0 oder 1.<br> Aber in Verbindung mit + oder * sagt es: so wenig wie möglich.<br> (ohne ? gilt für + oder *: so viel wie möglich)</p> </blockquote> <p>Wieder was gelernt, danke </p> <p>Jörg</p> https://forum.selfhtml.org/self/2021/apr/23/dauerthema-regexen/1787705#m1787705 Jörg 2021-04-24T07:24:23Z 2021-04-24T07:24:23Z Dauerthema: Regexen ;) <p>Danke Rolf,</p> <p>werde ich mir zu Gemüte führen.</p> <p>Jörg</p>