Php regex/preg_replace替换子域
我需要使用preg_replace将两个子域元素替换为一个元素。我的正则表达式技能几乎不存在。URL的格式如下:Php regex/preg_replace替换子域,php,regex,preg-replace,Php,Regex,Preg Replace,我需要使用preg_replace将两个子域元素替换为一个元素。我的正则表达式技能几乎不存在。URL的格式如下: user1.common.domain.org user2.common.domain.org something.common.domain.org else.common.domain.org 需要替换为: newvalue.domain.org 这仅适用于您可以确定它以domain.org结尾的情况: preg_replace('/(?:.*?)\.(?:.*?)(\.dom
user1.common.domain.org
user2.common.domain.org
something.common.domain.org
else.common.domain.org
需要替换为:
newvalue.domain.org
这仅适用于您可以确定它以domain.org结尾的情况:
preg_replace('/(?:.*?)\.(?:.*?)(\.domain\.org)/', $new_val."$1", $url);
试试这个:
preg_replace("/.+?(domain.+?)/", "newvalue.$1", "user1.common.domain.org");
使用正则表达式可能无法最好地解决此问题。尝试使用
explode()
:
(其中,$hostname
是您正在检查的主机名[例如,$\u服务器['HTTP\u主机]]
)
上述代码假设您正在查找与模式*.common.domain.org
匹配的主机名,并且主机名将始终以domain.org
结尾。这将起作用:
$sd = "user1.common.domain.org";
$sd = preg_replace('/.*?\.common\.(domain\.org)/i', 'newvalue.$1', $sd);
echo $sd ;
输出newvalue.domain.org请尝试以下代码:
preg\u replace('/\w+\.\w+(?=\.\w+\.\w+)/i','newvalue','user1.common.domain.org');
这将更加简洁:
对于主机:
$newValue='newValue';
$newHost=preg\u replace(“/^.+(?:\.common)(\.domain\.org)$/”、“$newValue$1”、$host);
将以任何字符开头的字符串替换一次或多次+“.common”+“.domain”到“newvalue.domain.org”
对于url:
$newValue='newValue';
$newUrl=preg\u replace(“/^(https?:\/\/).+(?:\.common)(\.domain\.org)$/”,“$1$newValue$2”,$url);
将起始字符串替换为“http://”或“https://”+任意字符一次或多次+>。将通用“+”.domain”替换为“http://”或“https://”+“newvalue.domain.org”这并不能确保仅替换domain.org值…它作用于字符串中[a-z0-9]+\.公共的任何内容,该字符串将“common.domain”替换为“newvalue”.即要素2和3,而不是要素1和2@devy:请提供一个示例,因为我不明白。代码板preferred@Brian:否它将user1.common替换为newvalue@yes123:我认为devy的意思是,如果字符串user1.common出现在文件的其他地方,但它不是域(后面没有domain.org),您的正则表达式仍将替换/匹配它。我认为您必须有积极的前瞻性,以确保接下来的是域关闭(如domain.org)。请看,这是一个定义不明确的问题。有很多方法可以产生这种输出,但逻辑要求缺乏具体性。研究人员不需要阅读公认的答案来理解这个问题。我们不知道
'/[^.]+\.[^.]+/“,$newvalue
就足够了。此答案缺少教育性解释。此答案缺少教育性解释。此答案缺少教育性解释。这些*?
最好作为否定字符类。
$exploded = explode('.', $hostname);
if( (count($exploded) == 4) and ($exploded[1] == 'common') )
{
$exploded[0] = 'newvalue';
unset($exploded[1]);
}
$hostname = implode('.', $exploded);
$sd = "user1.common.domain.org";
$sd = preg_replace('/.*?\.common\.(domain\.org)/i', 'newvalue.$1', $sd);
echo $sd ;