使用正则表达式匹配域,包括 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.com
和 www.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
我正在尝试使用正则表达式匹配所有域,包括 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.com
和 www.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