擅长:python、mysql、java
<p>我确实认为正则表达式正是适合这种情况的工具。Regex是一种模式匹配,当您有一个已知的模式可能有几个变体时(如本例中所示),它会得到最好的使用</p>
<p>不过,在你对这个问题的解释和试图解决这个问题时,我认为你过于简单化了。TLD比“2位国家代码”和“3位”其他代码有更多的风格。请参阅<a href="https://www.icann.org/resources/pages/tlds-2012-02-25-en" rel="nofollow noreferrer">ICANN's list of top-level domains</a>以获取当前可用的数百个字符,长度从2位以上。另外,你可能有没有任何斜杠和域名后有多个斜杠和点的网址</p>
<p>下面是我的解决方案(<a href="https://regex101.com/r/sHO0ec/1" rel="nofollow noreferrer">see on regex101</a>):</p>
<p><strong><code>^(?:https?://)?(?:[^/]+\.)*([^/]+\.[a-z]{2,})</code></strong></p>
<p>在第一个匹配组中捕获您想要的内容</p>
<p>分解:</p>
<ul>
<li><code>^(?:https?://)?</code>在开头匹配一个可能的协议</li>
<li><code>(?:[^/]+\.)*</code>匹配可能的多个非斜杠序列,每个序列后跟一个点</li>
<li><code>([^/]+\.[a-z]{2,})</code>匹配(并捕获)最后一个非斜杠序列,后跟一个点和TLD(2+个字母)</li>
</ul>