Strings kürzen mit preg_match()?

BhaaL

Grünschnabel
Hallo erst mal!

Ich habe mir letztens ein kleines News-Script geschrieben, mit Comment-Funktion und anderen Spielereien. Allerdings musste ich bald feststellen, dass die Comments durch Beiträge wie
LAAAAAAAAAAAAAAAAAAAAAMEEEEEEEEEEEEEE!
und diverse andere Ausdrücke, die ich hier lieber nicht verwenden will, verunstaltet bzw in der Breite erheblich gestreckt wurden.
Der springende Punkt sind die Zeichen-Wiederholungen, hier das A, das E und das !

Ich habe mit diversen Regulären Ausdrücken versucht, diese irgendwie zu kürzen, bisher ohne Erfolg.

Ein preg_replace in PHP hatte bisher keinen Erfolg, obwohl mein EggDrop mit demselbem Ausdruck ein "moooo" kürzen konnte.

-15:17:21- [BhaaL] % regsub "(.)\\1\\1" "moooo" "\\1"
-15:17:22- [Dodongo] result: moo - clicks: 128

Obiger TCL-Ausdruck
Code:
(.)\\1\\1
Funktioniert in PHP
Code:
(.)\1\1
absolut nicht.

Code:
<?php
if (isset($text)) {
echo strcut($text)."<br><br>\n";
}

function strcut($str) {
return preg_replace("/(.)\1\1/ime","/\1/",$str);
}
?>
<form action="test.php">
<textarea name="text"></textarea><br>
<input type="submit"></form>
"moooo" rein, "moooo" raus. Keine Änderung

Das "moooo" ist natürlich nur ein Test, und müsste weiter gekürzt werden können, durch eine Schleife oder einen Greedy-Ausdruck.

Kennt irgendwer eine Lösung für mein Problem, damit meine Comments-Seite in Zukunft normal breit und lesbar bleibt?

Danke im Vorraus,
BhaaL
 
Zuletzt bearbeitet:
Du kannst mit irgendeinem HTML Befehl(frag mal im HTML Forum) eine feste Breite festlegen.
Desweitern ist fuer dein Problem wohl auch [phpf]wordwrap[/phpf] geeinget ,welches dir die Moeglichkeit bietet nach einer Gewissen Anzahl die Zeile zu brechen.

Außerdem sind TCL code und PHP Code nicht gleich:
Obiger TCL-Ausdruck

Code:
Code:
(.)\\1\\1

Funktioniert in PHP

Code:
(.)\1\1

absolut nicht.
Bei dem PHP Ding fehlt ein \nach der Klammer bei deinem TCL Code waren es deren 2.
Selbiges Problem tritt auf bei dem Zweiten auf ,es fehlt ja ein Slash.
 
Zuletzt bearbeitet:
Original geschrieben von KristophS
Du kannst mit irgendeinem HTML Befehl(frag mal im HTML Forum) eine feste Breite festlegen.
Genau das will ich nicht.
Original geschrieben von KristophS
Desweitern ist fuer dein Problem wohl auch [phpf]wordwrap[/phpf] geeinget ,welches dir die Moeglichkeit bietet nach einer Gewissen Anzahl die Zeile zu brechen.
Von wordwrap wusste ich bisher nichts, danke für den Hinweis ;)
Original geschrieben von KristophS
Außerdem sind TCL code und PHP Code nicht gleich:
...
Wenn ich in PHP \\1 verwenden will, stirbt das Script mit einem Fehler "Parse error: parse error in /home/bhaal/public_html/reac/test.php(9) : regexp code on line 1"
Mit \1 als Back Reference hingegen passiert nichts.

Es sei denn, ich habe dich falsch verstanden, hier ist der Code von strcut():
(Gleich mit Schleife, damit mehrere Vorkommnisse auch berücksichtigt werden.)

Edit: Hoppla, warum hatte ich beim zweiten Parameter von preg_match "/\\1/" drin :-(
Code:
function strcut($str) {
while(preg_match("/(.)\\1\\1/ime",$str)) {
$str=preg_replace("/(.)\\1\\1/ime","\\1",$str);
}
return $str;
}

Ich werd auf jeden Fall ein wordwrap() in den Code einbauen, aber ich würde trotzdem wenigstens gerne wissen, wo der Fehler bei meinem Code liegt.

Gruß,
BhaaL
 
Zuletzt bearbeitet:
Zurück