我希望它捕捉到类似的东西somedomain.com/folder/path
,但不是类似的东西domain.sub.other.com
。到目前为止,我的正则表达式几乎是完整的,它只是没有筛选出多域 url:
^(.*)://(?!(.{2,3})\.(.*)(.{2,3})(.*)
有什么办法可以筛选出多个时期?
而不是.{2,3}
,你想要这样的东西:[^.]{2,3}
- 这从特定匹配中排除句点(无需转义,因为它在正则表达式的上下文中没有特殊含义)。总的来说,你会有类似的东西:
://[^.]+\.[^.]{2,3}(/.*)?
除非很明显,您这样做会丢失 *.info 之类的东西....
找到了一个适用于各种测试场景的解决方案:
^(.*)://([^.]+)\.([^(\?|/|\r|\n|\.)]+)((/|\?|$)+)(.*)$
在这里,第二组到最后一组与潜在的正斜杠、问号或字符串结尾匹配,与它之前的组一起工作,不允许包含“。”的匹配项。
所以最终的效果是它只匹配具有两部分域的 URL,例如“domain.com”,并且对字符串长度没有任何限制。