kills Geschrieben 18. Oktober 2004 Teilen Geschrieben 18. Oktober 2004 Hallo zusammen, ich bräuchte ein wenig hilfe bei einer Regex. Und zwar Suche ich einen Ausdruck (zur späteren Verwendung mit PHP) um dreifache "<br>"`s herauszufiltern. Heisst also, das ich maximal eine Leerzeile zwischen zwei elementen zulassen möchte. Ich hab selbst so gut wie keine Erfahrung mit RegEx und wüsste auf die schnelle auch nciht wie ich das anstellen soll! Danke im vorraus! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
gurkenpapst Geschrieben 18. Oktober 2004 Teilen Geschrieben 18. Oktober 2004 <?php $string = "bjf fh gkfjghkf hkfdh sgkfd <br><br><br>fhkjdshfkjdshfk hkj shfksfh kj "; echo "Einfach:<br>"; echo str_replace("<br><br><br>","<br><br>",$string); echo "Regexp:<br>"; echo ereg_replace("(<br>){3}","<br><br>",$string); ?> Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 19. Oktober 2004 Teilen Geschrieben 19. Oktober 2004 $br = "[<br>]"; echo preg_replace("|($br{2})$br+|","\$1",$string); [/PHP] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 19. Oktober 2004 Autor Teilen Geschrieben 19. Oktober 2004 $br = "[<br>]"; echo preg_replace("|($br{2})$br+|","\$1",$string); [/PHP] danke schonma, nun bräuchte ich noch, dass er auch <br /> mit einbezieht, da ja <br> und <br /> das gleiche bewirken. Er soll auch alle "leading" -<br>`s abschneiden. Also heisst falls ganz am anfang welche sind, alle wegschneiden. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DevilDawn Geschrieben 19. Oktober 2004 Teilen Geschrieben 19. Oktober 2004 nun bräuchte ich noch, dass er auch <br /> mit einbezieht, da ja <br> und <br /> das gleiche bewirken. Er soll auch alle "leading" -<br>`s abschneiden. Für 1: $pattern = "|(<br[ /]*>){3}|"; $replace = "<br><br>"; Für 2: $pattern = "|^(<br[ /]*>)*(.*)$|"; $replace = "\$2"; Genauer gesagt matchen die Pattern auf alle Tags die mit <br anfangen, mit > aufhören und dazwischen beliebige Mengen Spaces und Slashes haben. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 20. Oktober 2004 Autor Teilen Geschrieben 20. Oktober 2004 Für 1: $pattern = "|(<br[ /]*>){3}|"; $replace = "<br><br>"; Für 2: $pattern = "|^(<br[ /]*>)*(.*)$|"; $replace = "\$2"; Genauer gesagt matchen die Pattern auf alle Tags die mit <br anfangen, mit > aufhören und dazwischen beliebige Mengen Spaces und Slashes haben. besten dank euch allen! Ich werds heute abend gleich ma ausprobieren! :uli Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 21. Oktober 2004 Autor Teilen Geschrieben 21. Oktober 2004 hm also sieht ganz gut aus, nun müssten aber noch alle Bilder "<img>" raus Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 22. Oktober 2004 Teilen Geschrieben 22. Oktober 2004 komplett raus also? $img = "[<img.+?/?>]"; echo preg_replace("|$img|","",$string); [/PHP] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 22. Oktober 2004 Autor Teilen Geschrieben 22. Oktober 2004 danke ich werds versuchen. Warum sind die Patterns eigentlich von "|" eingeschlossen? sowas hab ich noch nie gesehen. Was bewirkt dieses Vorgehen? Ich kenn das nur mit "/PATTERN/" Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 22. Oktober 2004 Teilen Geschrieben 22. Oktober 2004 Du must als Begrenzer ein Zeichen nehmen, dass nicht Teil des Musters ist. Sonnst kommt es zum Fehler beim Komplilieren des RegEx. Man hätte auch °, §, [], usw. nehmen können. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 22. Oktober 2004 Autor Teilen Geschrieben 22. Oktober 2004 ahhh alles klar, danke! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 2. November 2004 Autor Teilen Geschrieben 2. November 2004 also, die RegEx müsse ein wenig umgebogen werden, aber ich weiss schon wieder nicht wie :floet: also ich möchte alle html tags ausser das img-Tag aus einem Text entfernen, und im Image tag sollen folgende eingeschaften gesetzt sein 'align="left" hspace="10"' ist das machbar? Danke im vorraus! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 2. November 2004 Teilen Geschrieben 2. November 2004 Erst mal mit striptags, alle Tags entfernen. Mit dem optionalen Parameter kannst du die Tags angeben, die drin bleiben. $pattern = '|[^<img.+?align="left" hspace="10".+?/?>]|ms'; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 3. November 2004 Autor Teilen Geschrieben 3. November 2004 Erst mal mit striptags, alle Tags entfernen. Mit dem optionalen Parameter kannst du die Tags angeben, die drin bleiben. $pattern = '|[^<img.+?align="left" hspace="10".+?/?>]|ms'; Danke schatzi, heut abend werd ichs ausprobieren ;-) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 4. November 2004 Autor Teilen Geschrieben 4. November 2004 ich habs jetzt so: $string = '<div style="text-align: center;"><img src="abc.gif" border="0" hspace="0" vspace="0"><br><br><div style="text-align: left;">Text test dasdfjkalsdf</div></div>'; $pattern = '|<img.*/?>|'; $replace = '|[^<img.+?align="left" hspace="10".+?/?>]|ms'; echo preg_replace( $pattern, $replace, $string); /* Ausgabe: |[^<img. +?align="left" hspace="10" .="">]|msText test dasdfjkalsdf */ [/PHP] wo is mein fehler? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 5. November 2004 Teilen Geschrieben 5. November 2004 Beim replace dürfen kein RegEx drin stehen. Ausserdem könnte es aktuell passieren, dass die Attribute align und hspace im Ergebnis doppelt vorkommen. Soll denn bei allen Img-Tags diese Attribute gesetzt/ersetzt werden? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 5. November 2004 Autor Teilen Geschrieben 5. November 2004 Beim replace dürfen kein RegEx drin stehen. Ausserdem könnte es aktuell passieren, dass die Attribute align und hspace im Ergebnis doppelt vorkommen. Soll denn bei allen Img-Tags diese Attribute gesetzt/ersetzt werden? Hi Enrico, - doppelte sollen nicht entstehen ( heisst werte überschreiben wenn vorhanden) - hm das ganze kann bei allen images passieren, ist kein ding Danke soweit. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 5. November 2004 Autor Teilen Geschrieben 5. November 2004 muss ich das mit preg_replace_callback() anstellen ?? Gruß, Markus Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 6. November 2004 Teilen Geschrieben 6. November 2004 Ich glaube das wäre fast sinnvoll. Dann könnte man alle Bilder nehmen und dann in der Funktion/ Methode entsprechend verzweigen (nochmal auf Existenz der Attribute prüfen). Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 7. November 2004 Autor Teilen Geschrieben 7. November 2004 Ich glaube das wäre fast sinnvoll. Dann könnte man alle Bilder nehmen und dann in der Funktion/ Methode entsprechend verzweigen (nochmal auf Existenz der Attribute prüfen). danke nochma, ich habs mit der function preg_replace_callback hinbekommen. :hodata Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 19. Februar 2005 Autor Teilen Geschrieben 19. Februar 2005 halli hallo zusammen, ich hab neue reg ex probleme ich möchte abkürzungen im text durch einen "outputfilter" jagen und so dann mit speziellen klassen erweitern damit ich diese entsprechend per css bestimmt formatieren kann. $subject = 'hier steht ein text, z.b. "dieser" <img src="ab.gif" alt="z.b. text"/>'; $pattern = '@z.b@i'; $replace = '<span class="shortcut">z.B.</span>'; $txt = preg_replace( $pattern, $replace, $subject); [/PHP] Nun ersetzt meine vorgehensweise leider auch auch das "z.b" im alt-Tag. Dies darf nicht passieren. Es darf also nur in texten ersetzt werden die nicht zu einem tag gehören. Danke und Gruß, Markus Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 20. Februar 2005 Teilen Geschrieben 20. Februar 2005 Dann mache ich es auch mal kurz: $pattern = "@(<.+?>)($short)(</.+?)*@i"; $replace = "\$1<span class=\"shortcut\">\$2</span>\$3"; $text = preg_replace($pattern, $replace, $text); [/PHP] Vielleicht auch interessant: http://de2.php.net/manual/de/function.preg-replace-callback.php Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 21. Februar 2005 Autor Teilen Geschrieben 21. Februar 2005 Dann mache ich es auch mal kurz: $pattern = "@(<.+?>)($short)(</.+?)*@i"; $replace = "\$1<span class=\"shortcut\">\$2</span>\$3"; $text = preg_replace($pattern, $replace, $text); [/PHP] Vielleicht auch interessant: http://de2.php.net/manual/de/function.preg-replace-callback.php hm danke schonmal enrico. Aber leider ist genau das gegengesetzte eingetreten was passieren soll,... er ersetzt jetzt genau nur die shortcuts die in "" stehen. die im fortlaufenden text lässt er unangetastet. ich habe das ganze so eingebaut: [PHP] function glossar_replace( $string) { global $REX; $mypage = "glossar"; // only for this file $I18N_GLOSSAR = new i18n($REX[LANG],$REX[INCLUDE_PATH]."/addons/$mypage/lang/"); // CREATE LANG OBJ FOR THIS ADDON $sql = new sql; $sql->setQuery("select * from rex__glossar order by shortcut"); for($i=0;$i<$sql->getRows();$i++) { $language = $sql->getValue("language"); if ( $language == 0) { $language = $I18N_GLOSSAR->msg('lang_de_short'); } elseif ( $language == 1) { $language = $I18N_GLOSSAR->msg('lang_en_short'); } else { $language = $I18N_GLOSSAR->msg('lang_fr_short'); } $id = $sql->getValue("short_id"); $shortcut = htmlentities($sql->getValue("shortcut")); $description = htmlentities($sql->getValue("description")); $language = trim( $language); $casesense = $sql->getValue("casesense"); $search = '@(<.+?>)('. $shortcut .')(</.+?)*@'; $replace = '$1<span lang="'. $language .'" xml:lang="'. $language .'" title="'. $language .': '. $description .'" class="shortcut">$2</span>$3'; $subject = $string; if ( $casesense == 0) { $search .= 'i'; } $string = preg_replace( $search, $replace, $subject); $sql->counter++; } return $string; } siehe: http://www.sokba.de/relaunch/index.php?article_id=57 Das Wort "Dr. Sommer" wird z.b. ersetzt Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 21. Februar 2005 Teilen Geschrieben 21. Februar 2005 Probier mal: $pattern = "@(<.+?>)($short)(</.+?>)*@i"; Ich hatte vergessen, vom schliessenden Tag, die Klammer wieder zu schliessen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 22. Februar 2005 Teilen Geschrieben 22. Februar 2005 probier mal lieber: $search = '@(<.+?>)(.+?)(z.B.)(.+?)(</.+?>)*@'; $replace = '$1$2<span class="shortcut">$3</span>$4$5'; [/PHP] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.