Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php regex/preg_replace替换子域_Php_Regex_Preg Replace - Fatal编程技术网

Php regex/preg_replace替换子域

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

我需要使用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('/(?:.*?)\.(?:.*?)(\.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 ;