我需要解析 html 内容的字符串,并在可能的情况下将其他域上的图像的 url 替换为 https,无论它们是 http。问题是并非所有外部域都支持 https,因此我不能将 http 全部替换为 https。
因此,我想使用我知道可以使用 https 的域列表来执行此操作。
还有一个额外的小问题,即搜索必须适用于与 www.www 无关的域。添加或不添加。
使用@Wiktor 给出的示例,我有一些接近我想要的东西,但这需要在找到匹配项时反转以运行替换,而不是在未找到匹配项时运行替换,因为此代码当前正在运行。
/http(?!:\/\/(?:[^\/]+\.)?(?:example\.com|main\.com)\b)/i
相信你会用的
$domains = array("example.com", "main.com");
$s = "http://example.com http://main.main.com http://let.com";
$re = '/http(?=:\/\/(?:[^\/]+\.)?(?:'
. implode("|", array_map(function ($x) {
return preg_quote($x);
}, $domains))
. ')\b)/i';
echo preg_replace($re, "https", $s);
// => https://example.com https://main.main.com http://let.com
查看 IDEONE 演示
正则表达式匹配:
http
- http
仅当后面跟着...(?=
- 正向前瞻的开始
:\/\/
- ://
文字子字符串(?:[^\/]+\.)?
- 除 /
和 .
(?:
+ implode
代码 - 创建一个转义各个文字分支的交替组(以匹配任何一个替代项,example
或main
等))
- 交替组结束\b
- 单词边界)
- 前瞻结束/i
- 不区分大小写修饰符。