Veröffentlicht 18. Oktober 200420 j 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!
18. Oktober 200420 j <?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); ?>
19. Oktober 200420 j $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.
19. Oktober 200420 j 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.
20. Oktober 200420 j 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
22. Oktober 200420 j komplett raus also? $img = "[<img.+?/?>]"; echo preg_replace("|$img|","",$string); [/PHP]
22. Oktober 200420 j 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/"
22. Oktober 200420 j 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.
2. November 200420 j 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!
2. November 200420 j 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';
3. November 200420 j 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 ;-)
4. November 200420 j 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?
5. November 200420 j 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?
5. November 200420 j 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.
6. November 200420 j 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).
7. November 200420 j 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
19. Februar 200520 j 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
20. Februar 200520 j 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
21. Februar 200520 j 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
21. Februar 200520 j Probier mal: $pattern = "@(<.+?>)($short)(</.+?>)*@i"; Ich hatte vergessen, vom schliessenden Tag, die Klammer wieder zu schliessen.
22. Februar 200520 j probier mal lieber: $search = '@(<.+?>)(.+?)(z.B.)(.+?)(</.+?>)*@'; $replace = '$1$2<span class="shortcut">$3</span>$4$5'; [/PHP]
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.