使用正则表达式匹配域,包括 www

Match domain including www using regex

我正在尝试使用正则表达式匹配所有域,包括 www 并替换为 preg_replace

喜欢

$oldomain = "example.com";
$newdomain = "www.example.net";
$string = "example.com, www.example.com, something.example.com, test.example.net, bla bla bla https://example.com etc etc"

preg_replace("#(www.?).#".$oldomain, $newdomain, $string);

因此它将搜索 example.comwww.example.com 并将其替换为 www.example.net

example.com -> www.example.net
www.example.com -> www.example.net

更新:

(www.?)*example.com - https://regex101.com/r/zOQBQD/1

. 是正则表达式中的一个特殊字符,表示任何单个字符,不包括换行符。需要转义或字符 class.

# 是你的分隔符,所以你的正则表达式必须在这两个里面。

* 是一个量词,表示前面的 character/group 可以出现零次或多次

您可能想要类似的东西:

preg_replace("#(www[.])?{$oldomain}#", $newdomain, $string);

{$oldomain} 也不是正则表达式,即要扩展的双引号中的变量的 PHP 语法。也可以写成:

preg_replace('#(www[.])?' . $oldomain . '#', $newdomain, $string);

您实际上还应该转义特殊字符的域,因此:

preg_replace('#(www[.])?' . preg_quote($oldomain, '#') . '#', $newdomain, $string);

可能是您真正想要的。

Regex101 以及:https://regex101.com/r/gwxyw1/1