【问题标题】:using str_replace to match whole words /case insensitive [duplicate]使用 str_replace 匹配整个单词/不区分大小写 [重复]
【发布时间】:2019-01-18 10:10:09
【问题描述】:

我正在尝试使用 str_replace 替换字符串中的整个单词,但是,即使是单词中匹配的字母也会被替换。我尝试了 preg_replace,但无法让它工作,因为我有一大堆要替换的单词。任何帮助表示赞赏。

$array2 = array('is','of','to','page');

$text = "homepage-of-iso-image";
echo $text1 = str_replace($array2,"",$text);

the output is : home--o-image

【问题讨论】:

  • 这对我来说看起来不错。您的预期输出是什么?
  • 输出应该是主页--iso-image。它从“主页”中删除“页面”,从“iso”中删除“is”
  • @user2334436 如果您只需要从字符串中删除of 为什么$array2'is','of','to','page'?不应该只是'of'吗?

标签: php preg-replace str-replace


【解决方案1】:

对于全词问题,有a solution here 使用preg_replace(),您的解决方案是将/\b 添加到数组值的开头,将\b/u 添加到数组值的末尾。可以使用preg_replace_callback (参见示例 #1) 处理不区分大小写的情况,但如果您使用的是像示例一样的小数组,我只建议复制数组值。

应用于您的示例:

$array2 = array(
  '/\bis\b/u',
  '/\bof\b/u',
  '/\bto\b/u',
  '/\bpage\b/u',
  '/\bIS\b/u',
  '/\bOF\b/u',
  '/\bTO\b/u',
  '/\bPAGE\b/u'
);

$text = "homepage-of-iso-image";
echo $text1 = preg_replace($array2,"",$text);

【讨论】:

    【解决方案2】:

    你可以使用array_diff

    array array_diff ( array $array1 , array $array2 [, array $... ] )
    

    将 array1 与一个或多个其他数组进行比较并返回 array1 中的值不存在于任何其他数组中。

    <?php
    
    $remove = array('is','of','to','page');
    
    $text   = "homepage-of-iso-image";
    $parts  = explode('-', $text);
    
    $filtered = array_diff($parts, $remove);
    print implode('-', $filtered);
    

    输出:

    homepage-iso-image
    

    【讨论】:

    猜你喜欢
    • 2012-05-11
    • 2012-03-29
    • 2012-12-03
    • 1970-01-01
    • 2015-03-17
    • 2016-10-29
    • 2014-10-26
    • 2014-02-25
    • 2014-10-23
    相关资源
    最近更新 更多