我需要修复此正则表达式以仅获取域。顶级域之后没有子域,文件夹或文件名。我已经开始了。我需要修复正则表达式的帮助
有许多变化要考虑:
这是第一部分完成的链接Link
前5个在工作,而后3个在文件夹和文件名下却没有。
到目前为止,这是我的正则表达式
/([a-zA-Z0-9-]+)(\.[a-zA-Z]{2,5})?(\.[a-zA-Z]+$)
结果应为:
答案 0 :(得分:2)
您可以尝试以下操作:
((?<![^\/]\/)\b\w+\.\b\w{2,3}(?:\.\b\w{2})??)(?:$|\/)
(?<![^\/]\/)
确保该字符串不以单斜杠开头(因为/index.php
看起来像一个域),但可以以双斜杠开头(如https://
) \b\w+\.
捕获了主域,通过使用左侧的单词边界并在右侧要求一个点来确保整个字符串是单词。 (同样,它捕获i
中除/index.php
之外的所有内容的问题,这就是为什么需要\b
的原因。)\b\w{2,3}
与顶级域(.com
)匹配(?:\.\b\w{2})?)
可选,捕获特定国家/地区的TLD(如果有)(?:$|\/)
要求整个匹配项后跟字符串$
的结尾或斜杠\/
使用前瞻而不是捕获组的替代方案:
(?<![^\/]\/)\b\w+\.\b\w{2,3}(?:\.\b\w{2})?(?=$|\/)
基本上,您需要删除捕获组,并将(?:$|\/)
末尾的非捕获组替换为正向(?=$|\/)
。
答案 1 :(得分:0)
如果可以的话,我们可以考虑使用具有非捕获组的表达式:
^(?:https?:\/\/)(?:www\.)?([^\/\s]+)$|^(?:https?:\/\/)(?:www\.)?([^\/\s]+)(?:.*)$