webentwicklung-frage-antwort-db.com.de

Regulärer Ausdruck, um alles nach dem letzten zu sammeln /

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.

47
Hellonearthis

Dies entspricht mindestens einem von (alles, was kein Schrägstrich ist), gefolgt vom Ende der Zeichenfolge:

[^/]+$


Anmerkungen:

  • Keine Parens, da keine Gruppen benötigt werden - das Ergebnis wird in Gruppe 0 (der Übereinstimmung selbst) gespeichert.
  • Verwendet + (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 );
98
Peter Boughton

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.

18
Gumbo

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.

12
James Socol
/^.*\/(.*)$/

^ = Beginn der Zeile

.*\/ = gierige Übereinstimmung mit dem letzten Vorkommen zum/vom Zeilenanfang

(.*) = Gruppe von allem, was nach dem letzten Ereignis von/kommt

7
rasjani

sie können auch normale Zeichenfolgen aufteilen

$str = "http://spreadsheets.google.com/feeds/spreadsheets/p1f3JYcCu_cb0i0JYuCu123";
$s = explode("/",$str);
print end($s);
3
ghostdog74

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.

2
eyelidlessness

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

1
hughdbrown

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
?>
  1. Regulärer Ausdruck, um alles nach dem letzten zu sammeln/
  2. Wie bekomme ich den Dateinamen mit PHP aus dem vollständigen Pfad?
0
eapo