我有一个预订网站,其中包含一个小型聊天系统,允许潜在的客人向主持人发送消息,例如询问房间是否可用。
我希望用户输入的任何网址都被隐藏(=替换为****),除非它是我的网站域名的网址。 我目前有一个成功匹配任何网址的正则表达式:
$replacing_string = '****';
$userMessage = preg_replace('{\b(?:http://)?(www\.)?([^\s]+)(\.com|\.org|\.net|\.it)\b}mi', $replacing_string, $userMessage);
我需要对其进行编辑,以便我可以匹配除 mydomain.com
之外的所有网址这些字符串的预期结果:
“嗨,请查看我的网站www.othersite.com/room/123”
在preg_replace之后:
“嗨,请检查我的网站****”
“嗨,这个房间有空吗?www.mydomain.com/room/123”
在preg_replace之后:
“嗨,这个房间有空吗?www.mydomain.com/room/123”
答案 0 :(得分:0)
否定前瞻
我们可以通过对现有正则表达式的最小更改来实现此目的:
$userMessage = preg_replace('(?!.*mydomain\.com){\b(?:http://)?(www\.)?([^\s]+)(\.com|\.org|\.net|\.it)\b}mi', $replacing_string, $userMessage);
否定先行(?!.*mydomain\.com)
声称接下来的内容不是某些字符mydomain.com
<强>参考强>