Regulärer Ausdruck
Rainer
- webserver
2 Vinzenz Mai0 Rainer0 Vinzenz Mai0 Rainer
Hallo,
ich möchte in SSI den Dokumentennamen ohne das Suffix .html, .php etc. erhalten.
Dies habe ich u.a. mit
<!--#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?
Gruß
Rainer
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
Hallo Vinzenz,
experimentell ermittelt, nicht aus der Doku: Dein Backslash wird als Maskierungszeichen ignoriert, sprich bei der Auswertung des Ausdrucks eliminiert. Danke für die Hilfe.
Wie Du schreibst "experimentell ermittelt" lt. meinen bisherigen Erfahrungen musste ein . im regulären Ausdruck mit einem \ maskiert werden.
Hat jemand eine Erklärung, warum dies hier anders ist?
Freundliche Grüße
Rainer
Hallo,
experimentell ermittelt, nicht aus der Doku: Dein Backslash wird als Maskierungszeichen ignoriert, sprich bei der Auswertung des Ausdrucks eliminiert. Danke für die Hilfe.
Wie Du schreibst "experimentell ermittelt" lt. meinen bisherigen Erfahrungen musste ein . im regulären Ausdruck mit einem \ maskiert werden.
wie ich schon geschrieben habe: zwei Auswertungsrunden, siehe auch Doku, Variablen-Substitution:
a) Auswertung der Zeichenkette in doppelten Anführungszeichen:
Hierbei wird aus dem doppelten Backslash ein einfacher Backslash
b) Auswertung des regulären Ausdrucks
Sowas ist in $programmiersprache häufig anzutreffen.
Ich habe Dir nicht umsonst eine Schreibweise empfohlen, die ohne Backslash auskommt.
Freundliche Grüße
Vinzenz
Hallo,
danke für die Erläuterung.
Ich war nur über das "experimentell" gestolpert und hatte daraus geschlossen, dass es in der Doku irgendwie anders steht.
Natürlich werde ich den Weg ohne Backslash wählen.
Nochmals Dank
Rainer