Java正则表达式来匹配url的域

标签 java regex

我想使用Java正则表达式来匹配url的域,例如, 对于 www.table.google.com,我想从 URL 中获取“google”,即该 URL 字符串中的倒数第二个单词。

任何帮助将不胜感激!!!

最佳答案

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

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

.+\\.(.+)\\..+

它获取点内的内容 \\..

以下是该模式的一些示例:https://regex101.com/r/L52oz6/1 。 正如您所看到的,它适用于简单的输入,但不适用于复杂的 url。

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

<小时/>

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

String[] elements = input.split("\\.");
String secondToLastElement = elements[elements.length - 2];

但不要忘记索引绑定(bind)检查。

<小时/>

或者,如果您正在寻找一个非常快速的解决方案,而不是从最后一个位置开始遍历输入。依次进行,直到找到第一个点,然后继续,直到找到第二个点。然后使用 input.substring(index1, index2); 提取该部分。

还有一个专门用于此目的的委托(delegate)方法,即 String#lastIndexOf (请参阅 documentation )。

看一下这段代码:

String input = ...
int indexLastDot = input.lastIndexOf('.');
int indexSecondToLastDot = input.lastIndexOf('.', indexLastDot);
String secondToLastWord = input.substring(indexLastDot, indexSecondToLastDot);

也许界限偏离了 1,还没有测试代码,但你明白了。另外不要忘记边界检查。

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

关于Java正则表达式来匹配url的域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45684047/

相关文章:

java - 在 update() void 中添加 if 语句时,图形不出现

受限玻尔兹曼机和深度学习的 Java 代码

ios - objective-c - 帮助创建格式正则表达式 (#,#)

javascript将子字符串替换为重复次数的值

regex - Google Analytics(分析)中用于字符串两个部分的正则表达式

regex - 正则表达式 - 替换前面的 if 字符不是 x

java - 理解回溯(迷宫算法)

java - 奇怪的 String.split (“\n” ) 行为

java - 如何使用PDFBox向PDF添加背景图像?

java - 为什么在针对 XSS 攻击模式进行验证时,非常大的字符串会抛出 java.lang.StackOverflow 异常