简体   繁体   中英

Regular Expression, match url without “http://” and any other “/”

I looked around for a while, but probably I can't "Google" with the proper keywords.. so I'm here. I need to match an url stripping out protocol to first /

Target: match the first substring from http:// to first / (maybe last / don't exist) or to the end And here come a problem:

i wrote this regex

(?<=//)(.*?)(?=/)

but this regex matches only url with at least 1 '/' in the end excluding the protocol..

here some url to be matched:

  • http:// www.google.com / (matched by my regex)
  • http:// www.google.com
  • https:// www.google
  • xxx:// www.google.com /hello/bleh blah....../
  • xxx:// google.com
  • google.com /blah/hello.php?x=11_x.hi
^(?:\w+://)?([\w.-]+)/?.*$

(Java的双反斜杠)似乎适用于所有示例,包括简单的www.google.com

Something like...

^(https?:\/\/)?([0-9a-zA-Z][-\w]*[0-9a-zA-Z\.)+[a-zA-Z]{2,6})\/

I saw this in a book I had. That should account for a variable http/https, disallow whitespace, and probably stop at the first slash.

Comment if I did this wrong.

This is working for all your example but the last:

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

[^/\\\\s] is a negated character class matching every character except / and \\s (whitespace, eg a space, tab or newline characters)

See it here on Regexr

What will not work is the last row. How do you want to decide what is a link? If I make the first part optional, it will match on every character except / and whitespaces.

It seems like you have the right answer, but you're missing the possibility of not having a trailing "/". Try this:

(?<=//)(.*?)(?=/|$)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM