正则表达式 - 在域未知时提取子域

时间:2016-05-19 14:58:02

标签: php regex

当域名未知时(我可能是localhost),我试图使用正则表达式获取子域名。到目前为止,我有这个,但它没有localhost要求:

(.*?)\.(?=[^\/]*\..{2,5})|(?=localhost)

one.domain.com  //matches 'one' which is correct
one.localhost:8000  //no match, expecting 'one'
domain.com  //no match, as expected

DEMO

2 个答案:

答案 0 :(得分:1)

使用此正则表达式,您可以获取第一个捕获组以获取子域:

/(.*?)\.(\w+)[\.|\:]([A-Za-z0-9]{3,4})/g

测试它:

https://regex101.com/r/rC0lO5/2

所有绿色匹配都是子域名。

更新

此更新的正则表达式与www.domain.comdomain.com不匹配,因为它们没有子域名:

/(.*?[^www])\.(\w+)[\.|\:]([A-Za-z0-9]{3,4})/g

https://regex101.com/r/rC0lO5/4

答案 1 :(得分:0)

试试这个:

/([^.]+)\.([^.]+\.[^.]+|localhost)(?:[\d]+)?/

我建议在另一个步骤中检查匹配的子域是否等于www以保持正则表达式简单。