Vinzenz Mai: Regulärer Ausdruck

Beitrag lesen

Hallo,

ich möchte in SSI den Dokumentennamen ohne das Suffix .html, .php etc. erhalten.

<!--#if expr="$DOCUMENT_NAME=/^(.*)..*$/" -->
   <!--#set var="DNAME" value="$1" -->
<!--#endif -->
versucht.
Ergebnis ist aber z.B. bei Anton.php:
DNAME = "Anton.ph".
Was mache ich hier falsch?

experimentell ermittelt, nicht aus der Doku: Dein Backslash wird als Maskierungszeichen ignoriert, sprich bei der Auswertung des Ausdrucks eliminiert. Dadurch hast Du:

eine beliebig lange Folge von beliebigen Zeichen, die Du einfängst,
  gefolgt von genau einem beliebigen Zeichen,
  gefolgt von beliebig vielen, auch keinen beliebigen Zeichen.

Wie kannst Du Dein Ziel erreichen? Maskiere den Backslash durch Verdoppelung:

<!--#if expr="$DOCUMENT_NAME=/^(.*)\\..*$/" -->  
   <!--#set var="DNAME" value="$1" -->  
<!--#endif -->  
<!--#echo var="DNAME" -->

Alternativ könntest Du auch nutzen, dass innerhalb einer Zeichenklasse der Punkt keine Sonderbedeutung hat:

<!--#if expr="$DOCUMENT_NAME=/^(.*)[.].*$/" -->  
   <!--#set var="DNAME" value="$1" -->  
<!--#endif -->  
<!--#echo var="DNAME" -->

Interessant finde ich, dass Deine Dateinamen mit einem Punkt enden dürfen.
Wenn das nicht der Fall wäre, nähme ich der Klarheit wegen:

eine beliebig lange Folge von beliebigen Zeichen, die Du einfängst,
  gefolgt von genau einem Punkt,
  gefolgt von beliebig vielen, mindestens einem beliebigen Zeichen,
  das nicht der Punkt ist:

<!--#if expr="$DOCUMENT_NAME = /^(.*)[.][^.]+$/" -->

Freundliche Grüße

Vinzenz