正则表达式 - 排除子域(preg_match)

时间:2013-03-06 11:00:45

标签: php regex preg-match

我想要匹配域名(使用preg_match),但我想排除子域名。

示例我希望匹配 example.org 上的所有子域名,但 boon.example.org 除外:

我试过这个:

$test = "boon.example.org";
$test2 = "null";
if(preg_match('#(?!boon)(\w+\.)?example\.org#', $test, $output)) {
    $test2 = $output[2] .'example.org';
}

但是test2的输出是: oon.example.org 而非 example.org

有人有答案吗?

3 个答案:

答案 0 :(得分:3)

如果您只查找确切的子域名,那么您是否只能检查字符串boon.example.org是否存在?对于此,似乎对正则表达式有点过分。

无论如何,以下正则表达式应该做你想要的:

.*(?<!\bboon\.|^.)example.org

对于subdomain.example.org以外的所有子域或boon.example.org的任何子域,都会返回boon.example.org

答案 1 :(得分:0)

试试这个:

echo '<pre>';
$test = "boon.example.org";
$test2 = "null";
preg_match('/^(?!boon\.)([\w]+\.)?example\.org$/', $test, $output);
print_r($output);

这将匹配除了恩惠之外的所有子域。

答案 2 :(得分:0)

此正则表达式适用于您:

^(((?!boon).)+\.)?example\.org$

RegExr link