Java正则表达式从URL中提取主机名和域名



我已经查看并尝试了多个其他线程,但对我来说不起作用。我需要regex解决方案才能工作,而且没有没有regex的java代码。

我已经检查过的一些线程:从给定的url中获取域名,从url字符串中提取主机名/域名,并使用Java正则表达式提取域名?没有一个对我有用,要么正则表达式不起作用,要么解决方案是没有正则表达式的java代码。

我想做什么?

Case 1:
Input: https://api.twitter.com/blog/category/2?user=42&status=enabled
Output: api.twitter.com
Input: abc.xyz.com/blog/category/2?user=42&status=enabled
Output: abc.xyz.com
Case 2:
Input: https://abc.xyz.com/blog/category/2?user=42&status=enabled
Output: xyz.com
Input: abc.xyz.com/blog/category/2?user=42&status=enabled
Output: xyz.com

我需要2个正则表达式来解决上面提到的每个情况。如果它能在一个地方完成,即使这样也能奏效。

我在第一篇文章中尝试了以下正则表达式:

^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(?([^#]*))?(#(.*))?

当存在https://或任何方案时,此方法有效,但当URL中没有方案时失败。

到目前为止,我正在使用两步解决方案来解决第一个案例。

Step 1: Replace scheme
(.*://)(.*) -> $2
remove anything before and including string "://"
Step 2: Extract host name
([^/]*)(.*) -> $1
The first group extracts everything that is before the first "/". Basically extracting everything that isn't slash till I see the first one. 

您可以将此正则表达式与可选匹配和捕获组一起使用:

^(?:w+://)?((?:[^./?#]+.)?([^/?#]+))

RegEx演示

RegEx详细信息:

  • ^:启动
  • (?:w+://)?:可选择匹配方案名称后跟://
  • (:启动捕获组#1
    • (?:[^./?#]+.)?:可以选择使用非捕获组匹配域名的第一部分
    • ([^/?#]+):匹配捕获组#2中非/?#的任何字符的1+
  • ):结束捕获组#1

相关内容

  • 没有找到相关文章

最新更新