Reguliere expressie om alles te verzamelen na de laatste /

Ik ben nieuw in reguliere expressies en vraag me af hoe ik er een moet formuleren die alles verzamelt na de laatste /.

Ik extraheer een ID die wordt gebruikt door Google’s GData.

mijn voorbeeldstring is

http://spreadsheets.google.com/feeds/spreadsheets/p1f3JYcCu_cb0i0JYuCu123

Waar de ID is: p1f3JYcCu_cb0i0JYuCu123

O, en ik gebruik PHP.


Antwoord 1, autoriteit 100%

Dit komt overeen met ten minste één van (alles wat geen schuine streep is) gevolgd door het einde van de tekenreeks:

[^/]+$

Opmerkingen:

  • Geen haakjes omdat er geen groepen nodig zijn – het resultaat gaat naar groep 0 (de wedstrijd zelf).
  • Gebruikt +(in plaats van *) zodat als het laatste teken een schuine streep is, het niet overeenkomt (in plaats van een lege tekenreeks).

Maar waarschijnlijk een snellere en eenvoudigere oplossingis om de ingebouwde functie voor het verwerken van stringlijsten in uw taal te gebruiken – bijv. ListLast( Text , '/' )of een gelijkwaardige functie.

Voor PHP is de dichtstbijzijnde functie strrchrdie als volgt werkt :

strrchr( Text , '/' )

Dit omvat de schuine streep in de resultaten – volgens Teddy’s opmerking hieronder kun je de schuine streep verwijderen met substr:

substr( strrchr( Text, '/' ), 1 );

Antwoord 2, autoriteit 16%

Over het algemeen:

/([^/]*)$

De gewenste gegevens zijn dan de match van de eerste groep.


Bewerken   Omdat je PHP gebruikt, kun je ook strrchrdat alles retourneert vanaf het laatste voorkomen van een teken in een string tot het einde. Of u kunt een combinatie gebruiken van strrposen substr, zoek eerst de positie van het laatste voorkomen en haal dan de substring van die positie tot het einde. Of explodeen array_pop, splits de string op de /en pak alleen het laatste deel.


Antwoord 3, autoriteit 10%

Je kunt ook de “bestandsnaam”, of het laatste deel, krijgen met de functie basename.

<?php
$url = 'http://spreadsheets.google.com/feeds/spreadsheets/p1f3JYcCu_cb0i0JYuCu123';
echo basename($url); // "p1f3JYcCu_cb0i0JYuCu123"

Op mijn doos kon ik gewoon de volledige URL doorgeven. Het is mogelijk dat u http:/aan de voorkant moet verwijderen.

Basename en dirnamezijn geweldig om door alles te bladeren dat lijkt op een unix-bestandspad.


Antwoord 4, autoriteit 8%

/^.*\/(.*)$/

^= begin van de rij

.*\/= hebzuchtige overeenkomst met de laatste keer dat / van het begin van de rij

(.*)= groep van alles dat komt na de laatste keer dat /


Antwoord 5, autoriteit 2%

je kunt ook een normale string splitsen

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

Antwoord 6, autoriteit 2%

Dit patroon zal de laatste slash in $0niet vastleggen, en het komt ook niet overeen als er geen tekens achter de laatste slash staan.

/(?<=\/)([^\/]+)$/

Bewerken: maar het vereist lookbehind, niet ondersteund door ECMAScript (Javascript, Actionscript), Ruby of een paar andere smaken. Als je een van die smaken gebruikt, kun je het volgende gebruiken:

/\/([^\/]+)$/

Maar het zalde laatste schuine streep in $0vastleggen.


Antwoord 7

Geen PHP-programmeur, maar strrposlijkt een meer veelbelovende plek om te beginnen. Vind de meest rechtse ‘/’, en alles voorbij dat is wat je zoekt. Geen regex gebruikt.

Vind de positie van de laatste keer dat een teken in een tekenreeks voorkomt


Antwoord 8

op basis van het antwoord van @Mark Rushakoff‘s antwoord de beste oplossing voor verschillende gevallen:

<?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. Reguliere expressie om alles te verzamelen na de laatste /
  2. Hoe de bestandsnaam van het volledige pad te krijgen met PHP?

Other episodes