我需要使用 preg_replace 来将两个子域元素替换为一个元素。我的正则表达式技能几乎为零。URL 的格式如下:
user1.common.domain.org
user2.common.domain.org
something.common.domain.org
else.common.domain.org
需要替换为:
newvalue.domain.org
我需要使用 preg_replace 来将两个子域元素替换为一个元素。我的正则表达式技能几乎为零。URL 的格式如下:
user1.common.domain.org
user2.common.domain.org
something.common.domain.org
else.common.domain.org
需要替换为:
newvalue.domain.org
preg_replace( '/[a-z0-9]+\.common/i' , 'newvalue' , $url );
这个问题可能不适合使用正则表达式来解决。尝试使用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
结尾。
试试这个:
preg_replace("/.+?(domain.+?)/", "newvalue.$1", "user1.common.domain.org");
这个会起作用:
$sd = "user1.common.domain.org";
$sd = preg_replace('/.*?\.common\.(domain\.org)/i', 'newvalue.$1', $sd);
echo $sd ;
输出 newvalue.domain.org
试试这段代码:
preg_replace('/\w+\.\w+(?=\.\w+\.\w+)/i', 'newvalue', 'user1.common.domain.org');
这样更简洁:
对于主机:
$newValue = 'newvalue';
$newHost = preg_replace("/^.+(?:\.common)(\.domain\.org)$/", "$newValue$1", $host);
将以任意字符一次或多次开头的字符串 + ".common" + ".domain" 替换为 "newvalue.domain.org"
对于 URL:
$newValue = 'newvalue';
$newUrl = preg_replace("/^(https?:\/\/).+(?:\.common)(\.domain\.org)$/", "$1$newValue$2", $url);
将以 "http://" 或 "https://" 开头,后跟一个或多个任意字符,接着是 ".common" 和 ".domain" 的字符串替换为 "http://" 或 "https://" 加上 "newvalue.domain.org"
只有当您确定它以 domain.org 结尾时,才能使用此选项:
preg_replace('/(?:.*?)\.(?:.*?)(\.domain\.org)/', $new_val."$1", $url);
.*?
最好改为否定字符类。 - mickmackusa
'/ [^。]+ \。[^。]+ /',$newvalue
是否足够。 - mickmackusa