Carsten: (PHP REGEXP) Erkennung eines Satzendes

Beitrag lesen

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. ^.\ ↩︎