2016-08-01 21 views
2

Hallo Ich versuche eine Regex zu finden, die die Begriffe in einer URL fangen würde.URL Regex Gruppe fangen

Zum Beispiel gegeben:
https://stackoverflow.com, wäre es fangen „Stackoverflow“
und gegeben https://stackoverflow.com/questions/ask, wäre es „Stackoverflow“, „Fragen“, „fragen“ und mögliche Bedingungen zwischen dem Schrägstrich nach dem Fang Domainname.

Bisher konnte ich die folgende regex finden, aber es kann nicht wiederholen fangen Gruppen

https?:\/\/(?:www\.)?([\da-z-]*)(?:[\.a-z]*)(?:\/([\da-z]*)\/?)+ 

Haben Sie Jungs keine Möglichkeiten haben, diese Frage zu lösen ?? das wäre toll.

Antwort

0

Ich testete die Antwort von Michal M es scheint nicht zu bekommen" www. " also habe ich es aktualisiert

/(?:\/(?:w{3}\.)?)\K([\w]+)/i 

Edit: Sobald es nicht wichtig ist, die "www." Ich habe es in eine nicht einfangende Gruppe platziert, damit es nicht gefangen wird. Übrigens habe ich auch den case insensitive Modifier so "WWW" gesetzt. wäre auch in Ordnung.

1

Versuchen Sie diese:

(?:(\/))\K(\w+) 

in Notepad ++ getestet

+0

Fehler auf 'https: // www.stackoverflow.com' –

+0

Erfasst auch nicht die 'Fragen' oder 'fragen' von' https: // stackoverflow.com/questions/ask' – castis

+0

Wirklich? https://regex101.com/r/yT4sW1/1 –

0

Sie können unter Verwendung von zwei separaten Regexes versuchen - ein für die Hostnamen Teil und ein anderes für die Bedingungen in dem Pfadteil. Dann kombinieren sie mit Wechsel Bau und tun globale Suche:

https?:\/\/(?:\w+\.)*(\w+)\.\w+ # this would capture hostname "term" 
    | 
\/(\w+)       # this would capture path "terms" 

(Anmerkung:. Erfordert /x Modifikator)

Demo: https://regex101.com/r/nA8jT9/2

0

Dank ich es geschafft, es neu zu ordnen es mit der Arbeit " www "

(?:\/(?:www\.)?)\K([\w\d]+) 
+0

'\ w' enthält' \ d' so '\ w' kann anstelle von [\ w \ d] verwendet werden –

+0

Was ist das erwartete Verhalten auf den' https: // meta.stackoverflow.com' Eingabezeichenfolge? –