当一个单词只是一个单词而不是复合单词的一部分时删除一个单词

时间:2011-07-03 23:23:39

标签: php preg-replace strip

我有以下功能,我希望它只在单个单词时删除“alpha” 而不是像“alphadog”这样的复合词的一部分。现在,我只是看到“狗”,它并不好。有帮助吗?

    function stripwords($string) 
{ 
  // build pattern once 
  static $pattern = null; 
  if ($pattern === null) { 
    // pull words to remove from somewhere 
    $words = array('alpha', 'beta', '-');  
    // escape special characters 
    foreach ($words as &$word) { 
      $word = preg_quote($word, '#'); 
    } 
    // combine to regex 
    $pattern = '#\b(' . join('|', $words) . ')\b\s*#iS'; 
  } 

  $print = preg_replace($pattern, '', $string);
  list($firstpart)=explode('+', $print);
  return $firstpart;

}

编辑:嗨,我有另一个问题...我已经使用新版本的函数进行了编辑:它会删除单词,调整空格,然后执行我需要的其他内容,但它不会删除短划线(或减)...怎么了?我试了一下但没有用...谢谢

2 个答案:

答案 0 :(得分:4)

使用此正则表达式

/\balpha\b/

\b代表“单词边界”,表示它将单独匹配单词(如果单词被单词分隔符包围)。

希望这有帮助

答案 1 :(得分:0)

此:

$pattern = '#' . join('|', $words) . '#iS';

应该是这样的:

$pattern = '#\b' . join('\b|\b', $words) . '\b#iS';