regex / preg_replace替换子域

时间:2011-06-15 17:59:13

标签: php regex preg-replace

我需要使用preg_replace用一个元素替换两个子域元素。我的正则表达式技能几乎不存在。网址的形式如下:

user1.common.domain.org
user2.common.domain.org
something.common.domain.org
else.common.domain.org

需要替换为:

newvalue.domain.org

7 个答案:

答案 0 :(得分:2)

preg_replace( '/[a-z0-9]+\.common/i' , 'newvalue' , $url );

答案 1 :(得分:1)

试试这个:

preg_replace("/.+?(domain.+?)/", "newvalue.$1", "user1.common.domain.org");

答案 2 :(得分:1)

使用正则表达式可能无法解决此问题。尝试使用explode()

$exploded = explode('.', $hostname);
if( (count($exploded) == 4) and ($exploded[1] == 'common') )
{
    $exploded[0] = 'newvalue';
    unset($exploded[1]);
}

$hostname = implode('.', $exploded);

(其中$hostname是您要检查的主机名[例如,$_SERVER['HTTP_HOST']

上述代码假设您正在查找与模式*.common.domain.org匹配的主机名,并且主机名始终以domain.org结尾。

答案 3 :(得分:1)

这将有效:

$sd = "user1.common.domain.org";

$sd = preg_replace('/.*?\.common\.(domain\.org)/i', 'newvalue.$1', $sd);

echo $sd ;

输出 newvalue.domain.org

答案 4 :(得分:0)

尝试此代码:

preg_replace('/\w+\.\w+(?=\.\w+\.\w+)/i', 'newvalue', 'user1.common.domain.org');

答案 5 :(得分:0)

这将更加简洁:

对于主持人:

$newValue = 'newvalue';
$newHost = preg_replace("/^.+(?:\.common)(\.domain\.org)$/", "$newValue$1", $host);

将以任意字符开头的字符串替换一次或多次+“ .common” +“ .domain”替换为“ newvalue.domain.org”

对于网址:

$newValue = 'newvalue';
$newUrl = preg_replace("/^(https?:\/\/).+(?:\.common)(\.domain\.org)$/", "$1$newValue$2", $url);

将以“ http://”或“ https://” +任何字符一次或多次+“ .common” +“ .domain”开头的字符串替换为“ http://”或“ https” ://“ +” newvalue.domain.org“

答案 6 :(得分:-1)

这仅适用于您确定以domain.org结尾的地方:

preg_replace('/(?:.*?)\.(?:.*?)(\.domain\.org)/', $new_val."$1", $url);