【问题标题】:Match domain including www using regex使用正则表达式匹配域,包括 www
【发布时间】:2022-01-28 16:50:20
【问题描述】:

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

【问题讨论】:

  • @user3783243 我已经描述了我的问题。我想用带或不带 www 的新域替换所有旧域。
  • @user3783243 ." . $oldomain . '.#' 这将匹配 www 和非 www 旧域?
  • @user3783243 你问的是字符串? $string。它是一个网页字符串。
  • @user3783243 我已经更新了示例字符串以及我尝试过的正则表达式 URL。

标签: php regex preg-replace


【解决方案1】:

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

# 是您的分隔符,因此您的正则表达式必须在这两个范围内。

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

你可能想要接近这个的东西:

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

【讨论】:

  • 是的,你明白我的意思。这项工作。感谢代码和解释
  • @Mèrebaiseur 需要阅读几遍才能确定它。将来,您应该在问题中尽可能详细。一些用户会在问题不清楚的时候投反对票并继续前进。
  • 知道了。再次感谢:)
  • 从所有 3 个 PHP 代码中,都没有工作:3v4l.org/oC0Mt
  • 你的真实代码有语法错误吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多