Wie man eine regex für Dateien mit der Endung .php?
Bin ich zu schreiben versucht, einen sehr einfachen regulären Ausdruck, die mit jeder Datei-Namen, der noch nicht zu Ende in .php. Ich kam mit der folgenden...
(.*?)(?!\.php)$
...aber diese Spiele alle Dateinamen. Wenn jemand könnte mich in die richtige Richtung wäre ich sehr dankbar.
- Welche Sprache? Jede unterscheidet sich in seiner RegEx-Implementierung, so ist es wichtig zu wissen, - php? perl? python? java? javascript? .net?
- Ist der reguläre Ausdruck in PHP geschrieben? Die Sprache der Umsetzung zählt sehr viel.
- Sie haben nie dafür gestimmt, dass einer der Antworten, die Menschen geschrieben, um Ihre Fragen noch haben, akzeptieren Sie einer von Ihnen. Betrachten Sie dabei so: "das ist ziemlich viel, ist der Geist SO.
- Bart, ich bin eigentlich ganz bewusst, dass, aber ganz offen, ich glaube nicht, dass meine vorherigen Fragen haben eine Antwort, die hilfreich ist. In der Antwort auf die anderen Herren, die Sprache, ist eigentlich für Apache (ProxyPasMatch).
- okay, fair genug. Obwohl Ihre erste Frage (und Ihren Kommentar auf eine bestimmte Antwort in es) scheint dem zu widersprechen, Ihre Bemerkung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fast:
Den letzten vier Punkte stellen Sie sicher, dass es etwas zu freuen uns auf, wenn der look-ahead aktiviert ist.
Die äußeren Klammern sind unnötig, weil Sie daran interessiert sind, das gesamte match.
Den widerstrebenden
.*?
ist unnötig, da backtracking vier Schritte ist effizienter als die überprüfung der folgenden Bedingung mit jedem Schritt.^(.{1,3}|.*(?!\.php)....)$
.Statt mit negativen lookahead, manchmal ist es einfacher zu verwenden, die negation außerhalb der regex auf die hosting-Sprachniveau. In vielen Sprachen, die
boolean
ergänzen Betreiber ist der unäre!
.Also schreiben Sie etwas wie dieses:
Je nach der Sprache, können Sie auch überspringen, regex zusammen und verwenden Sie so etwas wie (z.B. Java):
Als für das problem mit dem original-Muster selbst:
Dies entspricht auch dem, sagen wir,
file.php
, weil die(.*?)
erfassen kannfile.php
, und suchen vor, Sie können nicht mit\.php
, aber Sie können mit einem$
, also alles in allem es ist ein Spiel! Sie können nutzen wollen schaut hinter, oder wenn es nicht unterstützt wird, können Sie lookahead auf die start der Zeichenfolge.Diese passen auf alle strings, die nicht mit
".php"
mit negativen lookahead.Referenzen
Fragen
(?<=#)[^#]+(?=#)
arbeiten?Sind Sie am Ende der Zeichenfolge und sucht vor. Was Sie wollen, ist ein Blick hinter statt:
Beachten Sie, dass nicht alle regelmäßige Ausdruck-Motoren unterstützen lookbehind-assertions.
.*$(?<!\.php)
$
Anker verbrauchen kann eine nachfolgende neue-Zeile-Zeichen, das ergibt ein anderes Ergebnis. Das ist wahrscheinlich nicht gehen, um ein Problem beim Parsen von URLs im Apache aber.