wiem, że jest to stare pytanie, ale może być pomocne dla osób, które widzą to pytanie.
Najlepsze podejście do uzyskania rozszerzenia z nazwy pliku wewnątrz adresu URL, również z parametrami, to wyrażenie regularne.
Można użyć tego wzorca (nie tylko adresy URL):
.+(\.\w{3})\?*.*
Objaśnienie:
.+ Match any character between one and infinite
(...) With this you create a group, after you can use for getting string inside the brackets
\. Match the character '.'
\w Matches any word character equal to [a-zA-Z0-9_]
\?* Match the character '?' between zero and infinite
.* Match any character between zero and infinite
Przykład:
http://example.com/file.png
http://example.com/file.png?foo=10
But if you have an url like this:
http://example.com/asd
This take '.com' as extension.
Więc można użyć silny wzorzec dla URL, takich jak to:
.+\/{2}.+\/{1}.+(\.\w+)\?*.*
Objaśnienie:
.+ Match any character between one and infinite
\/{2} Match two '/' characters
.+ Match any character between one and infinite
\/{1} Match one '/' character
.+ Match any character between one and infinite
(\.\w+) Group and match '.' character and any word character equal to [a-zA-Z0-9_] from one to infinite
\?* Match the character '?' between zero and infinite
.* Match any character between zero and infinite
Przykład:
http://example.com/file.png (Match .png)
https://example.com/file.png?foo=10 (Match .png)
http://example.com/asd (No match)
C:\Foo\file.png (No match, only urls!)
http://example.com/file.png
http: .+
// \/{2}
example.com .+
/ \/{1}
file .+
.png (\.\w+)
Bye
Można spróbować dostać ostatnią pozycję?. Jeśli znajdziesz, znajdź ostatnią pozycję. przedtem i zwróć wszystko pomiędzy. Jeśli nie ? znajduje się, cokolwiek przyjdzie po ostatniej pozycji. będzie twoim rozszerzeniem pliku. – Crono
Podciąg powinien działać, po prostu upewnij się, że uwzględniasz rozszerzenia o długości większej niż 3. – Neolisk
czy to Ty podajesz adresy URL? Czy są do Twojej witryny lub stron trzecich? –