正则表达式仅匹配来自URL的域

时间:2015-03-15 14:06:34

标签: regex

我正在努力形成一个匹配的正则表达式:

  1. 只有网址
  2. 的域名
  3. 无网址时的整个字符串
  4. 验收测试(正则表达式应与粗体文本匹配):

    • 的http:// mozart.co.uk
    • 的https:// avocado.si/hmm
    • http://www。的 qwe123qwe.com
    • 星巴克
    • 基准123

    到目前为止,我已经提出了这个问题:

    ([^\/\/]+)(?:,|$)
    

    它工作正常,但不适用于末尾带有斜杠的网址。如何修改表达式以包括完整路径(http(s)://右侧的所有内容)?谢谢。

3 个答案:

答案 0 :(得分:1)

如果以http://或https://开头,则此正则表达式将匹配它们,直到下一个斜杠。如果它不以http://和https://开头,那么它将匹配整个字符串。足够接近?

(?:^https?:\/\/([^\/]+)(?:[\/,]|$)|^(.*)$)

我应该注意,大多数语言都内置了正确解析URL的功能,这些都是首选。

你应该注意我有2套捕捉括号,所以根据你的语言可能很重要。

答案 1 :(得分:0)

也许是^(http[s]?:\/\/)?(.*)$。在这里播放:https://regex101.com/r/iZ2vL4/1

答案 2 :(得分:0)

这将具有匹配组,您想要的域将在第4个匹配组中。

/^((http[s]?|ftp):\/\/)?\/?([^\/\.]+\.)*?([^\/\.]+\.[^:\/\s\.]{2,3}(\.[^:\/\s\.]{2,3})?(:\d+)?)($|\/)([^#?\s]+)?(.*?)?(#[\w\-]+)?$/mg

Regex101.com workbench to check out your URLs只需将它们粘贴到“ TEST STRING”文本框中即可对其进行测试。

不记得我从哪里得到的……所以我不知道该归功于谁。但这很漂亮!