3

我环顾了一会儿,但可能我无法使用正确的关键字“谷歌”......所以我在这里。我需要将一个 url 剥离协议匹配到 first /

目标:将http://的第一个子字符串匹配到第一个/(可能最后一个/不存在)或到最后一个问题来了:

我写了这个正则表达式

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

但是这个正则表达式只匹配最后至少有 1 个“/”的 url,不包括协议..

这里有一些要匹配的网址:

  • http://www.google.com/ (由我的正则表达式匹配)
  • 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
4

4 回答 4

0

就像是...

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

我在我的一本书中看到了这一点。这应该解释变量 http/https,不允许空格,并且可能在第一个斜杠处停止。

如果我做错了,请发表评论。

于 2012-12-04T13:56:35.067 回答
0
^(?:\w+://)?([\w.-]+)/?.*$

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

于 2012-12-04T13:53:49.663 回答
0

这适用于您的所有示例,但最后一个:

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

[^/\\s]是一个否定字符类,匹配除/and之外的所有字符\s(空格,例如空格、制表符或换行符)

在 Regexr 上查看

最后一行是行不通的。你想如何决定什么是链接?如果我将第一部分设为可选,它将匹配除/空格以外的每个字符。

于 2012-12-04T13:57:13.137 回答
0

看起来你有正确的答案,但你错过了没有尾随“/”的可能性。尝试这个:

(?<=//)(.*?)(?=/|$)
于 2013-03-07T01:51:29.760 回答