1

我有一个带有小型聊天系统的预订网站,允许潜在客人向房东发送消息,例如询问房间是否可用。

我希望隐藏用户键入的任何 URL(= 替换为 ****),除非它是我的站点域的 URL。我目前有一个成功匹配任何 URL 的正则表达式:

    $replacing_string = '****';

    $userMessage = preg_replace('{\b(?:http://)?(www\.)?([^\s]+)(\.com|\.org|\.net|\.it)\b}mi', $replacing_string, $userMessage);

我需要对其进行编辑,以便匹配除包含mydomain.com的所有 URL

这些字符串的预期结果:

“嗨,请查看我的网站 www.othersite.com/room/123”

preg_replace 之后:

“嗨,请查看我的网站 ****”


“嗨,这个房间有空吗?www.mydomain.com/room/123”

preg_replace 之后:

“嗨,这个房间有空吗?www.mydomain.com/room/123”

4

1 回答 1

0

负前瞻

我们可以通过对您现有的正则表达式进行最小的更改来做到这一点:

$userMessage = preg_replace('(?!.*mydomain\.com){\b(?:http://)?(www\.)?([^\s]+)(\.com|\.org|\.net|\.it)\b}mi', $replacing_string, $userMessage);

否定的前瞻(?!.*mydomain\.com)断言接下来的不是一些字符mydomain.com

参考

于 2014-07-16T09:43:24.437 回答