Siramon: (PHP REGEXP) Erkennung eines Satzendes

hallo forum

das problem ist dieses:

in einem newsskript (php4) gibt es eine archivfunktion. wird diese aufgerufen sollen die ersten drei sätze eines artikels angezeigt werden.

die artikel befinden sich in einer datenbank (mySQL) und haben auch html-tags im content.

was ich suche, ist eine regexp, die mir die ersten 3 sätze jedes artikels zurückgibt.

mein ansatz war:

$content = aus_der_datenbank
ereg("([1]+).\ ([^.\ ]+).\ ([^.\ ]+).\ ", $content, shortcontent);
echo shortcontent[1] . $shortcontent[2] . $shortcontent[3];

in worten suche am wortanfang, nach allen zeichen ausser punkt gefolgt von leerzeichen.. mach das dreimal.

das klappt aber überhaupt nicht :(
<cite>Warning: Cannot pass expression as argument 3 by reference </cite>

ich habe noch mehrer andere sachen probiert, komme aber der lösung in keiner weise näher.

ich freue mich über noch so kleine denkanstösse!

vielen dank

mfg

Rolf "Siramon" Sonderegger


  1. ^.\ ↩︎

  1. Hi Rolf,

    ereg("([1]+).\ ([^.\ ]+).\ ([^.\ ]+).\ ", $content, shortcontent);

    ^-- hier fehlt ein $

    dann verschwindet auch diese ...hm... "interessante" Fehlermeldung:

    <cite>Warning: Cannot pass expression as argument 3 by reference </cite>

    Der Einfachheit halber habe ich erst mal einen neuen regulären Ausdruck gebastelt: (Irgendwie sind die Teile write only ;-)

    preg_match("~^((.*?. ){1,3})~s",$content,$shortcontent);
    echo $shortcontent[1],"<br>";

    Die preg_xxx sind die 'moderneren' Funktionen, machen aber praktisch das gleiche. (Das ereg-Zeugs hab ich
    mir deshalb nicht mehr angetan, ich hab keine Ahnung ob es da genauso ginge)

    kurz aufgedröselt:

    ~^((.*?. ){1,3})~s
                ^----Punkt passt auch auf Newline
    ^            ^-----Anfang/Ende Zeichen des Patterns.
    ^------------------Ab Anfang
      ^----------^------Erster Ausdruck
       ^----^-----------Zweiter Ausdruck
        ^^---------------Beliebige lange Zeichenkette
          ^---------------aber nicht 'gierig'  <---das ist der 'Trick'
           ^^-------------deswegen nur bis zur ersten Punkt Leerzeichen-Kombination
                ^^^--------und das ein bis drei mal

    Zu deinem Ausdruck:
    "([^.\ ]+).\ "
    das passt auf eine Zeichenkette die weder Punkt noch Leerzeichen enthält und von einer Zeichenfolge Punkt-Leerzeichen abgeschlossen wird.
    Also auf "knuberlwutsch. " nicht aber auf "knuberl wutsch. "

    hoffe, das hilft

    Carsten


    1. ^.\ ↩︎