我需要使用preg_replace用一个元素替换两个子域元素。我的正则表达式技能几乎不存在。网址的形式如下:
user1.common.domain.org
user2.common.domain.org
something.common.domain.org
else.common.domain.org
需要替换为:
newvalue.domain.org
答案 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);