Home > Back-end >  Regex get port from host with multipe choises
Regex get port from host with multipe choises

Time:11-03

I need to get the port from url, I use the following which works

https://regex101.com/r/yoBODY/1

(?:([^@]*)@)?(.\[. \]|([^:] ))(?:[:](\d ))?

As im quite new to regex, Am I missing something?

This is the inputs and from it I need to get the port

test:222
https://aaa.com:333

https://www.aaa.com:333
aaa.bbb.cccc:8000

im getting some URI/URL with port

if its OK please let me know

CodePudding user response:

For strings used as standalone strings you can use

^(?:https?:\/\/)?(?:([^@]*)@)?(\[[^][] \]|([^:] ))(?::(\d ))?$

If you match these strings as lines in a multiline text, it is advisable to add \n and \r to the negated character classes to avoid overflowing on next line(s):

^(?:https?:\/\/)?(?:([^@\r\n]*)@)?(\[[^][\r\n] \]|([^:\r\n] ))(?::(\d ))?$

See the regex demo. Details:

  • ^ - start of string
  • (?:https?:\/\/)? - an optional http:// or https://
  • (?:([^@]*)@)? - an optional sequence of any zero or more chars other than @ (captured into Group 1) and then a @ char
  • (\[[^][] \]|([^:] )) - Group 2: either [, one or more chars other than [ and ] and then ] or one or more chars other than : captured into Group 3
  • (?::(\d ))? - an optional sequence of : and one or more digits captured into Group 4
  • $ - end of string.
  • Related