Java Regexp与url的域匹配

Java Regexp与url的域匹配,java,regex,Java,Regex,我想使用Java正则表达式来匹配url的域,例如, 对于www.table.google.com,我想从url中去掉“google”,即这个url字符串中的最后一个单词 任何帮助都将不胜感激 这实际上取决于输入的复杂性 下面是一个非常简单的正则表达式: .+\\.(.+)\\..+ 它获取点内的内容\\. 下面是该模式的一些示例:。 如您所见,它适用于简单的输入,但不适用于复杂的URL 但是为什么要重新发明轮子呢?有很多非常好的库可以正确解析任何复杂的url。当然,对于简单的输入,很容易构建一

我想使用Java正则表达式来匹配url的域,例如, 对于www.table.google.com,我想从url中去掉“google”,即这个url字符串中的最后一个单词


任何帮助都将不胜感激

这实际上取决于输入的复杂性

下面是一个非常简单的正则表达式:

.+\\.(.+)\\..+
它获取点内的内容
\\.

下面是该模式的一些示例:。 如您所见,它适用于简单的输入,但不适用于复杂的URL

但是为什么要重新发明轮子呢?有很多非常好的库可以正确解析任何复杂的url。当然,对于简单的输入,很容易构建一个小型正则表达式。因此,如果这不能解决您输入的问题,那么请回调,我将调整regex模式


请注意,您也可以使用简单的拆分,如:

String[] elements = input.split("\\.");
String secondToLastElement = elements[elements.length - 2];
但不要忘记索引边界检查


或者,如果您搜索一个非常快速的解决方案,则从最后一个位置开始遍历输入。继续操作直到找到第一个点,继续操作直到找到第二个点。然后使用
input.substring(index1,index2)提取该部分

还有一个委托方法正是为了达到这个目的,即
String#lastIndexOf
(请参阅)

请看以下代码片段:

String input = ...
int indexLastDot = input.lastIndexOf('.');
int indexSecondToLastDot = input.lastIndexOf('.', indexLastDot);
String secondToLastWord = input.substring(indexLastDot, indexSecondToLastDot);
也许界限是1,还没有测试代码,但是你知道了。也不要忘记绑定检查


这种方法的优点是速度非常快,可以直接处理
字符串的内部结构,而无需创建副本。

这取决于输入的复杂性

private static final Pattern URL_MATCH_GET_SECOND_AND_LAST = 
        Pattern.compile("www.(.*)//.google.(.*)", Pattern.CASE_INSENSITIVE);

String sURL = "www.table.google.com";

if (URL_MATCH_GET_SECOND_AND_LAST.matcher(sURL).find()){

    Matcher matchURL =  URL_MATCH_GET_SECOND_AND_LAST .matcher(sURL);

    if (matchURL .find()) {
        String sFirst = matchURL.group(1);
        String sSecond= matchURL.group(2);
    }
}
下面是一个非常简单的正则表达式:

.+\\.(.+)\\..+
它获取点内的内容
\\.

下面是该模式的一些示例:。 如您所见,它适用于简单的输入,但不适用于复杂的URL

但是为什么要重新发明轮子呢?有很多非常好的库可以正确解析任何复杂的url。当然,对于简单的输入,很容易构建一个小型正则表达式。因此,如果这不能解决您输入的问题,那么请回调,我将调整regex模式


请注意,您也可以使用简单的拆分,如:

String[] elements = input.split("\\.");
String secondToLastElement = elements[elements.length - 2];
但不要忘记索引边界检查


或者,如果您搜索一个非常快速的解决方案,则从最后一个位置开始遍历输入。继续操作直到找到第一个点,继续操作直到找到第二个点。然后使用
input.substring(index1,index2)提取该部分

还有一个委托方法正是为了达到这个目的,即
String#lastIndexOf
(请参阅)

请看以下代码片段:

String input = ...
int indexLastDot = input.lastIndexOf('.');
int indexSecondToLastDot = input.lastIndexOf('.', indexLastDot);
String secondToLastWord = input.substring(indexLastDot, indexSecondToLastDot);
也许界限是1,还没有测试代码,但是你知道了。也不要忘记绑定检查

这种方法的优点是速度非常快,可以直接处理
字符串的内部结构,而无需创建副本。

我的尝试:

private static final Pattern URL_MATCH_GET_SECOND_AND_LAST = 
        Pattern.compile("www.(.*)//.google.(.*)", Pattern.CASE_INSENSITIVE);

String sURL = "www.table.google.com";

if (URL_MATCH_GET_SECOND_AND_LAST.matcher(sURL).find()){

    Matcher matchURL =  URL_MATCH_GET_SECOND_AND_LAST .matcher(sURL);

    if (matchURL .find()) {
        String sFirst = matchURL.group(1);
        String sSecond= matchURL.group(2);
    }
}
(?<scheme>https?:\/\/)?(?<subdomain>\S*?)(?<domainword>[^.\s]+)(?<tld>\.[a-z]+|\.[a-z]{2,3}\.[a-z]{2,3})(?=\/|$)
我的尝试:

(?<scheme>https?:\/\/)?(?<subdomain>\S*?)(?<domainword>[^.\s]+)(?<tld>\.[a-z]+|\.[a-z]{2,3}\.[a-z]{2,3})(?=\/|$)

那么
google.co.nz
google.com.au
goo.gl
呢?如果您已经知道需要从
second last word
获取字符串,那么您可以使用
string
的一些utils函数来获取它。使用
lastIndexOf(“.”
删除部分
.com
,然后再次使用它获取部分
google
这取决于输入的复杂性。。。下面是一个非常简单的正则表达式:
+\\.(.+)\\\..+
,下面是该模式的一些示例:。但是为什么要重新发明轮子呢?有很多非常好的库可以正确解析任何复杂的url。当然,对于简单的输入,很容易构建一个小的正则表达式。例如google.co.nz就是“co”。我只能以java正则表达式的形式编写,我不能使用任何代码,因为它用于一些插件,他们只接受java正则表达式关于
google.co.nz
google.com.au
goo.gl
?如果您已经知道需要从
second last word
中获取字符串,那么您可以使用
string
的一些utils函数来获取它。使用
lastIndexOf(“.”
删除部分
.com
,然后再次使用它获取部分
google
这取决于输入的复杂性。。。下面是一个非常简单的正则表达式:
+\\.(.+)\\\..+
,下面是该模式的一些示例:。但是为什么要重新发明轮子呢?有很多非常好的库可以正确解析任何复杂的url。当然,对于简单的输入,很容易构建一个小的正则表达式。例如google.co.nz就是“co”。我只能以java正则表达式的形式编写,我不能使用任何代码,因为它用于一些插件,它们只接受java正则表达式