我想使用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/