PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks. |
 |

24-11-2006, 11:35
|
max479
Registrierter Benutzer
|
|
Registriert seit: Jul 2005
Beiträge: 73
|
|
[REGEX] String bereinigen
Hallo erst mal,
Ich hab ein Problem einen String zu bereinigen, indem zuviele
<br /> vorkommen. Das ganze ist daher passiert, da ich leider nl2br
vor der Speicherung in die Datenbank angewendet habe und nicht erst bei der Ausgabe. Da es sich um tausende Datensätze handelt, möchte ich das jetzt auch nicht mehr umstellen und eine Lösung bei der Ausgabe finden.
Ich hoffe das mir hier vielleicht jemand helfen kann.
Ich hab beispielsweise folgenden String:
Actionfilm, USA 1974<br />
(Mr. X)<br />
<br />
<br />
<br />
Text 1<br />
Text 2,3,4<br />
<br />
<br />
<br />
<br />
Wie kann ich es nun anstellen alle <br /> zu entfernen,
wo mehr als zwei hintereinander sind und am Schluss des Strings sowieso
jedes <br /> entfernt wird?
Das Ergebnis sollte also so aussehen:
Actionfilm, USA 1974<br />
(Mr. X)<br />
<br />
Text 1<br />
Text 2,3,4
Vielen Dank im Voraus für die Hilfe!
Liebe Grüße,
Max
|

24-11-2006, 11:51
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
|
|
Zitat:
Da es sich um tausende Datensätze handelt, möchte ich das jetzt auch nicht mehr umstellen und eine Lösung bei der Ausgabe finden.
|
Falsch! Du möchtest einmalig alle brs löschen. Also nl2br_revers() (nein, die gibt es nicht) anwenden.
das ist auch erstmal einfacher.  str_replace() reicht da vollkommen aus. Musst du halt nur einmalig auf alle DS anwenden. Mysql: UPDATE.
Wenn du aber zufällig massive probleme mit ziemlich vielen leerzeilen hast, kannst du auch noch ne preg_replace funktion schreiben, die danach die anzahl der zeilenumbrüche am stück auf maximal 2 (oder 3) beschränkt.
|

24-11-2006, 12:01
|
max479
Registrierter Benutzer
|
|
Registriert seit: Jul 2005
Beiträge: 73
|
|
Zitat:
Wenn du aber zufällig massive probleme mit ziemlich vielen leerzeilen hast, kannst du auch noch ne preg_replace funktion schreiben, die danach die anzahl der zeilenumbrüche am stück auf maximal 2 (oder 3) beschränkt.
|
Darum hab ich ja hier auch gepostet.
Wenn ich str_replace anwende, gehen mir ja alle Zeilenumbrüche verloren,
sofern ich Dich richtig verstanden habe.
Bsp.:
PHP-Code:
<?
$neu_beschr=str_replace("<br />","",$erg["Beschreibung"]);
echo $neu_beschr;
?>
Es dürfte also nur mittels regulärem Ausdruck funktionieren.
Die Frage ist nur, wie dieser aussehen muss.
lg
|

24-11-2006, 12:05
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
|
|
Zitat:
Wenn ich str_replace anwende, gehen mir ja alle Zeilenumbrüche verloren, sofern ich Dich richtig verstanden habe.
|
nein. Du sollst die brs löschen. das heißt aber nicht, dass du auch die Zeilenumbrüche löschst. Dazwischen ist ein unterschied.
Du meinst also, dass in $neu_beschr; keine umbrüche mehr drin sind? Dann guck dir mal bitte den HTML-Quelltext an.
Zitat:
Es dürfte also nur mittels regulärem Ausdruck funktionieren.
Die Frage ist nur, wie dieser aussehen muss.
|
Nein, wirst du jetzt sehen.
|

24-11-2006, 12:31
|
max479
Registrierter Benutzer
|
|
Registriert seit: Jul 2005
Beiträge: 73
|
|
Also ein Stückchen bin ich schon weitergekommen.
PHP-Code:
<?
$neu_beschr=str_replace("<br />","",$erg["Beschreibung"]);
$neu_beschr=trim($neu_beschr);
//$neu_beschr=preg_replace("/\n{2,}/","\n",$neu_beschr);
$neu_beschr=nl2br($neu_beschr);
echo $neu_beschr;
?>
Ergebnis schaut nun so aus:
Actionfilm, USA 1974
(Mr. X)
Text 1
Text 2,3,4
Eventuelle Leerzeilen am Ende sind so schonmal Geschichte.
Letztes Problem:
Mit welcher Regex kann ich mehr als 2 \n durch 2 ersetzen?
Lerraum zwischen "Mr. X" und "Text 1".
Danke für Deine Hilfe!
lg,
Max
|

24-11-2006, 12:43
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
|
|
wie sieht dein ansatz aus? unser regex tutorial gelesen (von Sky)?
|

24-11-2006, 13:03
|
max479
Registrierter Benutzer
|
|
Registriert seit: Jul 2005
Beiträge: 73
|
|
Hab die Lösung schon
PHP-Code:
<?
$neu_beschr=str_replace("<br />","",$erg["Beschreibung"]);
$neu_beschr=trim($neu_beschr);
$neu_beschr=preg_replace("/\n\r+/"," ",$neu_beschr);
$neu_beschr=nl2br($neu_beschr);
echo $neu_beschr;
?>
Danke und liebe Grüße!
|

24-11-2006, 13:56
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
|
|
sieht gut aus,
aber: den code hier sollst du nur einmalig aufrufen, nicht bei jeder ausgabe.
PHP-Code:
$neu_beschr=str_replace("<br />","",$erg["Beschreibung"]);
$neu_beschr=trim($neu_beschr);
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Thema bewerten |
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|