Regex Dart从URL字符串提取主机
假设我有以下URL作为字符串Regex Dart从URL字符串提取主机,regex,flutter,dart,url,Regex,Flutter,Dart,Url,假设我有以下URL作为字符串 String-urlSource='1〕https://www.wikipedia.org/'; 我想从这个url字符串中提取主页名;'wikipedia',从url中删除https://、www.com.org部分 提取这个的最佳方法是什么?如果是RegExp,我必须使用什么正则表达式?在这种情况下,您不需要使用 Dart有一个用于解析URL的预制类: 使用该API,您想要实现的目标非常简单: final urlSource='1〕https://www.wik
String-urlSource='1〕https://www.wikipedia.org/';
我想从这个url字符串中提取主页名;'wikipedia',从url中删除https://、www.com.org部分
提取这个的最佳方法是什么?如果是RegExp,我必须使用什么正则表达式?在这种情况下,您不需要使用 Dart有一个用于解析URL的预制类: 使用该API,您想要实现的目标非常简单:
final urlSource='1〕https://www.wikipedia.org/';
最终uri=uri.parse(urlSource);
uri.host;//www.wikipedia.org
将为您提供www.wikipedia.org
。从那里,您应该可以轻松地提取wikipedia
Uri.host
还将删除整个路径,即主机后面的/
后面的任何内容
提取二级域
如果您想从主机上获取wikipedia,即wikipedia
,您可以执行uri.host.split('.')[uri.host.split('.').length-2]
但是,请注意,这不是故障保护,因为您可能有或没有子域(例如
www
),顶级域也可能由多个部分组成。例如,co.uk
使用co
作为二级域。“wikipedia”不是页面名称,而是二级域。无论如何,[^\.]+(?=\.[^\.]+$)
都可以。如下所述,最好使用预先存在的代码来处理解析。这里有两个教训:1)并非所有涉及字符串的问题都需要正则表达式;2)如果问题是其他人可能遇到的问题,查找为您执行此操作的现有代码。OP没有询问提取主机的问题。@MonkeyZeus我添加了一个解释-在没有所有顶级域的映射的情况下,检索二级域实际上并不总是严格可行的。因此,我的简单示例应该可以。然而,从那以后,这真的很琐碎。除非OP处理的是定制的DNS或本地主机,否则我认为TLD对面向公众的网站是有保证的,所以你不需要关心它是什么,而是在按句点拆分时检索倒数第二个字符串。@MonkeyZeus我同意。它是如此的微不足道,如果保持更一般的话,答案可能会更有用。我不熟悉dart,但是一行可以是uri.host.split('.')[uri.host.split('.').length-2]