Mit Reg_Ex Zeichenkette nach zwei Faktoren durchsuchen

azoo

Mitglied
Hallo PHP'ler ,

diese Reg_Ex ist aus einer Blätterfunktion und soll in der Zeichenkette "$text" den Punkt am Satzende nach dem erreichen von "6000" Zeichen bestimmt durch $wert suchen.
So wird ein Text mit z.b. 12000 Zeichen in zwei Teile zerlegt.

Das ist soweit ok, nur enthält diese Zeichenkette auch BBCode und wenn innerhalb eines BBCode formatierten Textes der Punkt nach 6000 Zeichen gefunden wird, wird auch an der Stelle abgeschnitten.
Wie das dann auf der Ausgabeseite aussieht brauche ich euch wohl nicht erklären?!
BBCode wird nicht ausgeführt und als Text angezeigt.

Könnt ihr mir helfen diese Reg_ex so zu erweitern, das sie nach 6000 Zeichen den nächsten "Punkt" NACH dem BBCode formatierten Text, findet?

Man müßte also nach 6000 Zeichen nach der letzten eckigen Klammer "]" suchen und dann nach dem Punkt "."


PHP:
$wert = 6000; 
    
preg_match_all("/.{0,$wert}.+?\./s", $text, $seiten);

Danke für eure Hilfe!

Markus
 
PHP:
$text = 'YJSUDCJHDHallo.
jhdfjhdfjhdjfhdf.';

preg_match_all('~.{0,6000}.+?([^\[.*?\]]|[\[.*?\]])\.~is', $text, $r);

Aber eigentlich ist mein Regex garnicht richtig denn die BBCode Tags sind auch im String enthalten, aber er sucht nur nach vorkommen nach den 6000 :D
 
Erst mal danke für deine Antwort aber das ist es noch nicht wirklich.
Habe die Funktion getestet und sie schneidet noch im BBCode ab.

Noch mal ein Beispiel:


[bold]Lorem ipsum dolor sit amet, consetetur sadipscing elitr, X1 sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.X2 At vero eos et accusam et justo duo dolores et ea rebum.[/bold]Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.X3 Lorem ipsum dolor sit amet, consetetur



X1 = Stelle von Zeichen 6000

X2 = erster Punkt nach Zeichen 6000, hier würde abgeschnitten werden und BBCode wäre hin, weil die ENDTAG nicht angezeigt wird, erst auf der nächsten Seite.

X3 = hier darf geschnitten werden. Es ist der erste Punkt nach BBCode; nach der 6000sten Stelle.


Hoffe ihr steigt noch durch!

EDIT: habe grade bemerkt das man nach [/ suchen muß denn die ] gibts ja auch im Starttag !



Markus
 
Zuletzt bearbeitet:
Der Text ist zu kurz, aber wenn wir die Begrenzung machen würden, braucht man einen über 6000 Langen text :D

PHP:
$text = '[bold]Lorem ipsum dolor sit amet, consetetur sadipscing elitr, X1 sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.X2 At vero eos et accusam et justo duo dolores et ea rebum.[/bold]Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.X3 Lorem ipsum dolor sit amet, consetetur ';

$sp = preg_split('~(.*)[\.]{0,6000}~is', $text);

echo '<pre>'. print_r($sp,true) .'</pre>';
 
Hmm, damit komm ich irgendwie nicht weiter. Als Ausgabe erhalte ich ein ARRAY mit drei Feldern ohne Inhalt. habe den Zähler von 6000 runter gesetzt.

:confused:
 
Zurück