Heyho!
Bin langsam am verzeifeln… Habe in einem String einen langen Text, welcher aus mehreren Sätzen besteht.
Nun möchte ich mit einem regex einen Mittelsatz herausholen. Das klappt mit z.B.:
$inhalt=~/.{150,300}[.!?] (\b.{150,250}.\b)/;
auch ganz gut (bei langen Inhalten!)
Gewollt war hier, dass erst ein Satz gefunden wird, welcher ab dem 150sten Zeichen beginnt, wenn ein .! oder ? den vorherigen Satz geschlossen hat. Ab dort dann also den Satz rausholen welcher mindestens 150 und maximal 250 lang ist. (können auch 2 oder mehrere Sätze dann sein).
Nun hab ich damit aber ein Problem mit kürzeren Texten ;-(
Da erhalte ich nämlich gar kein Ergebnis. Und das ist mein Problem.
Dachte, ich mache dass dann halt variabel, indem ich einfach drei Stufen durchlaufe:
for (my $i=3;$i>0;$i–)
{
my $wert1 = 50 * $i;
my $wert2 = 100 * $i;
my $wert3 = 150;
my $wert4 = length($inhalt)+1;
$inhalt=~/.{$wert1,$wert2}[.!?] (\b.{$wert3,$wert4}.\b)/;
$teilstring = $1;
if (length($teilstring>20)) {last;}
}
Das klappt dann nun aber auch nicht… Ach, es könnte auch sein, dass gerade der Satz, welcher in den ersten Ausdruck passen würde, bis zum Ende der Zeile geht und kein Satzzeichen zum Schluss mehr beinhaltet. Das müsste auch berücksichtigt werden.
Kurzum, mir raucht der Kopf und komm grad nicht mehr weiter.
Ein Beispielsatz, mit dem es nicht funktioniert ist folgende Konstellation:
bsp: Aktuelles Impressionen Jahreskalender Mitteilungen Information Öffnungszeiten Preise Anfahrt Lage Wennschondennschon Kontakt Adresse Unser Team Newsletter Angebot Preise Impressum Wetter Mitglied Mail Entspannen. .ein Erlebnis im Grossraumbüro Oschersleben! Workout für Körper und Geist finden die Besucher in der komfortablen Pauseecke. Das Team der staatlich geführten Workoutbteilung hält neben Arbeit und Brossmuskelaufbau Anwendungen auch besondere Chefbehandlungen bereit. Die KaffeTeeBar im Pausenbereich bietet kleine Snacks und Getränke für zwischendurch an.
Nicht über den Inhalt wundern, frei erfunden