You need to enable JavaScript to run this app. PHP中替换字符串的点为问号时如何跳过指定域名后缀
优惠活动
大模型
产品
解决方案
定价
更多

PHP中替换字符串的点为问号时如何跳过指定域名后缀

实现方案

str_replace 不支持条件匹配逻辑,无法实现跳过指定后缀的需求,使用负向前瞻思路搭配 preg_replace 可以快速实现可配置的跳过规则。

核心逻辑

匹配所有不属于跳过后缀的.:即匹配单个.,且这个.后面不跟随你配置的跳过后缀(如com/net/org)。

完整可运行代码

// 自定义可配置的跳过后缀数组
$skip = array(".com",".net",".org");

// 预处理跳过后缀:移除前导点、转义特殊正则字符,生成正则匹配分组
$skipSuffixes = array_map(function($item) {
    // 去掉开头的点,转义避免特殊字符破坏正则规则
    return preg_quote(ltrim($item, '.'), '/');
}, $skip);
// 拼接成可匹配多后缀的分支分组
$skipPatternGroup = '(' . implode('|', $skipSuffixes) . ')';

// 待处理原始字符串
$string = "An example of a website would be google.com or similar. However this is not what we are looking for";

// 正则规则:匹配.,且后面不跟随跳过后缀(负向前瞻实现跳过逻辑)
$pattern = '/\.(?!' . $skipPatternGroup . ')/i';
// 执行替换
$result = preg_replace($pattern, '?', $string);

echo $result;

输出效果

运行后输出完全符合预期:

An example of a website would be google.com or similar? However this is not what we are looking for

补充说明

  • 正则末尾的i修饰符表示不区分大小写匹配,Google.COM这类场景的点也会被保留,不需要可以直接去掉该修饰符。
  • 如果需要更严格的匹配(避免把google.communication里的.comm误判为.com后缀),可以修改正则增加边界判断:
    $pattern = '/\.(?!' . $skipPatternGroup . '(\b|$))/i';
    
    该规则只会跳过后面紧跟着完整跳过后缀、且后缀后为单词边界(空格、字符串结尾、非字母字符等)的点。
  • 后续新增跳过后缀只需修改$skip数组即可,不需要改动核心正则逻辑。

内容的提问来源于stack exchange,提问作者onlybarca6

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.26 07:54:03