Ich bin neu bei regulären Ausdrücken und frage mich, wie man einen Ausdruck formuliert, der nach dem letzten /
alles sammelt.
Ich extrahiere eine ID, die von Google GData verwendet wird.
mein Beispielstring ist
http://spreadsheets.google.com/feeds/spreadsheets/p1f3JYcCu_cb0i0JYuCu123
Wo ist die ID: p1f3JYcCu_cb0i0JYuCu123
Oh und ich benutze PHP.
Dies entspricht mindestens einem von (alles, was kein Schrägstrich ist), gefolgt vom Ende der Zeichenfolge:
[^/]+$
Anmerkungen:
+
(anstelle von *
), sodass das letzte Zeichen, das ein Schrägstrich ist, nicht übereinstimmt (und keine leere Zeichenfolge übereinstimmt).
Aber höchstwahrscheinlich eine schnellere und einfachere Lösung ist die integrierte Stringlistenverarbeitungsfunktion Ihrer Sprache, d. H. ListLast( Text , '/' )
oder eine entsprechende Funktion.
Für PHP ist die nächstgelegene Funktion strrchr , die wie folgt funktioniert:
strrchr( Text , '/' )
Dies schließt den Schrägstrich in den Ergebnissen ein. Laut Teddys Kommentar können Sie den Schrägstrich mit substr entfernen:
substr( strrchr( Text, '/' ), 1 );
Allgemein:
/([^/]*)$
Die gewünschten Daten wären dann die Übereinstimmungen der ersten Gruppe.
Edit Da Sie PHP verwenden, können Sie auch strrchr
verwenden. Das gibt alles vom letzten Vorkommen eines Zeichens in einem String bis zum Ende zurück. Oder Sie könnten eine Kombination aus strrpos
und substr
verwenden, zuerst die Position des letzten Vorkommens suchen und dann den Teilstring von dieser Position bis zum Ende abrufen. Oder explode
und array_pop
, teilen Sie den String am /
und erhalten Sie nur den letzten Teil.
Sie können auch den "Dateinamen" oder den letzten Teil mit der Funktion basename erhalten.
<?php
$url = 'http://spreadsheets.google.com/feeds/spreadsheets/p1f3JYcCu_cb0i0JYuCu123';
echo basename($url); // "p1f3JYcCu_cb0i0JYuCu123"
Auf meiner Box konnte ich einfach die vollständige URL übergeben. Möglicherweise müssen Sie http:/
von der Vorderseite abziehen.
Basename und dirname eignen sich hervorragend zum Durchlaufen von Elementen, die wie ein Unix-Dateipfad aussehen.
/^.*\/(.*)$/
^
= Beginn der Zeile
.*\/
= gierige Übereinstimmung mit dem letzten Vorkommen zum/vom Zeilenanfang
(.*)
= Gruppe von allem, was nach dem letzten Ereignis von/kommt
sie können auch normale Zeichenfolgen aufteilen
$str = "http://spreadsheets.google.com/feeds/spreadsheets/p1f3JYcCu_cb0i0JYuCu123";
$s = explode("/",$str);
print end($s);
Dieses Muster erfasst nicht den letzten Schrägstrich in $0
und stimmt mit nichts überein, wenn nach dem letzten Schrägstrich keine Zeichen vorhanden sind.
/(?<=\/)([^\/]+)$/
Edit: aber es erfordert lookbehind, nicht unterstützt von ECMAScript (Javascript, Actionscript), Ruby oder ein paar anderen Varianten . Wenn Sie eine dieser Varianten verwenden, können Sie Folgendes verwenden:
/\/([^\/]+)$/
Aber es wird will den letzten Schrägstrich in $0
aufnehmen.
Kein PHP Programmierer, aber strrpos scheint ein vielversprechenderer Ausgangspunkt zu sein. Finden Sie das rechte "/" und alles, was Sie danach suchen. Kein Regex verwendet.
Finden Sie die Position des letzten Vorkommens eines Zeichens in einer Zeichenfolge
basierend auf @ Mark Rushakoff 's antworten die beste Lösung für verschiedene Fälle:
<?php
$path = "http://spreadsheets.google.com/feeds/spreadsheets/p1f3JYcCu_cb0i0JYuCu123?var1&var2#hash";
$vars =strrchr($path, "?"); // ?asd=qwe&stuff#hash
var_dump(preg_replace('/'. preg_quote($vars, '/') . '$/', '', basename($path))); // test.png
?>