开发者

regex/preg_replace to replace subdomain [closed]

开发者 https://www.devze.com 2023-03-13 10:18 出处:网络
Closed. This question needs details or clarity. It is not currently accepting answers. Want to improve this question? Add details and clarify the problem by editing this post.
Closed. This question needs details or clarity. It is not currently accepting answers.

Want to improve this question? Add details and clarify the problem by editing this post.

开发者_StackOverflow中文版

Closed 2 years ago.

Improve this question

i need to use preg_replace to replace two subdomain elements with a single element. my regex skills are virtually nonexistent. the urls are of the form:

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

and need to be replaced with:

newvalue.domain.org


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


Try this:

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


This problem might not be best-solved with a regular expression. Try using explode():

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

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

(where $hostname is the hostname you are checking [e.g., $_SERVER['HTTP_HOST'])

The above code assumes that you are looking for hostnames that match the pattern *.common.domain.org, and that the hostname will always end with domain.org.


This will work:

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

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

echo $sd ;

outputs newvalue.domain.org


try this code:

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


This would be more concise:

For host:

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

replaces string staring with any character one or more times + ".common" + ".domain" to "newvalue.domain.org"

For url:

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

replaces string staring with "http://" or "https://" + any character one or more times + ".common" + ".domain" to "http://" or "https://" + "newvalue.domain.org"


This is only for if you can be sure it ends with domain.org:

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

精彩评论

暂无评论...
验证码 换一张
取 消